mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-07-07 03:07:46 +08:00
Consolidate duplicate implementations of max subarray (#8849)
* Remove max subarray sum duplicate implementations * updating DIRECTORY.md * Rename max_sum_contiguous_subsequence.py * Fix typo in dynamic_programming/max_subarray_sum.py * Remove duplicate divide and conquer max subarray * updating DIRECTORY.md --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
@ -1,63 +0,0 @@
|
||||
"""
|
||||
Kadane's algorithm to get maximum subarray sum
|
||||
https://medium.com/@rsinghal757/kadanes-algorithm-dynamic-programming-how-and-why-does-it-work-3fd8849ed73d
|
||||
https://en.wikipedia.org/wiki/Maximum_subarray_problem
|
||||
"""
|
||||
test_data: tuple = ([-2, -8, -9], [2, 8, 9], [-1, 0, 1], [0, 0], [])
|
||||
|
||||
|
||||
def negative_exist(arr: list) -> int:
|
||||
"""
|
||||
>>> negative_exist([-2,-8,-9])
|
||||
-2
|
||||
>>> [negative_exist(arr) for arr in test_data]
|
||||
[-2, 0, 0, 0, 0]
|
||||
"""
|
||||
arr = arr or [0]
|
||||
max_number = arr[0]
|
||||
for i in arr:
|
||||
if i >= 0:
|
||||
return 0
|
||||
elif max_number <= i:
|
||||
max_number = i
|
||||
return max_number
|
||||
|
||||
|
||||
def kadanes(arr: list) -> int:
|
||||
"""
|
||||
If negative_exist() returns 0 than this function will execute
|
||||
else it will return the value return by negative_exist function
|
||||
|
||||
For example: arr = [2, 3, -9, 8, -2]
|
||||
Initially we set value of max_sum to 0 and max_till_element to 0 than when
|
||||
max_sum is less than max_till particular element it will assign that value to
|
||||
max_sum and when value of max_till_sum is less than 0 it will assign 0 to i
|
||||
and after that whole process, return the max_sum
|
||||
So the output for above arr is 8
|
||||
|
||||
>>> kadanes([2, 3, -9, 8, -2])
|
||||
8
|
||||
>>> [kadanes(arr) for arr in test_data]
|
||||
[-2, 19, 1, 0, 0]
|
||||
"""
|
||||
max_sum = negative_exist(arr)
|
||||
if max_sum < 0:
|
||||
return max_sum
|
||||
|
||||
max_sum = 0
|
||||
max_till_element = 0
|
||||
|
||||
for i in arr:
|
||||
max_till_element += i
|
||||
max_sum = max(max_sum, max_till_element)
|
||||
max_till_element = max(max_till_element, 0)
|
||||
return max_sum
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
print("Enter integer values sepatated by spaces")
|
||||
arr = [int(x) for x in input().split()]
|
||||
print(f"Maximum subarray sum of {arr} is {kadanes(arr)}")
|
||||
except ValueError:
|
||||
print("Please enter integer values.")
|
@ -1,21 +0,0 @@
|
||||
from sys import maxsize
|
||||
|
||||
|
||||
def max_sub_array_sum(a: list, size: int = 0):
|
||||
"""
|
||||
>>> max_sub_array_sum([-13, -3, -25, -20, -3, -16, -23, -12, -5, -22, -15, -4, -7])
|
||||
-3
|
||||
"""
|
||||
size = size or len(a)
|
||||
max_so_far = -maxsize - 1
|
||||
max_ending_here = 0
|
||||
for i in range(0, size):
|
||||
max_ending_here = max_ending_here + a[i]
|
||||
max_so_far = max(max_so_far, max_ending_here)
|
||||
max_ending_here = max(max_ending_here, 0)
|
||||
return max_so_far
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
a = [-13, -3, -25, -20, 1, -16, -23, -12, -5, -22, -15, -4, -7]
|
||||
print(("Maximum contiguous sum is", max_sub_array_sum(a, len(a))))
|
Reference in New Issue
Block a user