Skip to content

Commit b2a2dc6

Browse files
committed
feat: added maximum_subarray_sum
1 parent e309256 commit b2a2dc6

File tree

5 files changed

+21
-16
lines changed

5 files changed

+21
-16
lines changed

docs/source/pydatastructs/linear_data_structures/algorithms.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,4 @@ Algorithms
4747

4848
.. autofunction:: pydatastructs.intro_sort
4949

50-
.. autofunction:: pydatastructs.maximum_subarray_sum
50+
.. autofunction:: pydatastructs.maximum_subarray_sum_1

pydatastructs/linear_data_structures/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,6 @@
4848
selection_sort,
4949
insertion_sort,
5050
intro_sort,
51-
maximum_subarray_sum
51+
maximum_subarray_sum_1
5252
)
5353
__all__.extend(algorithms.__all__)

pydatastructs/linear_data_structures/algorithms.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
'selection_sort',
3232
'insertion_sort',
3333
'intro_sort',
34-
'maximum_subarray_sum'
34+
'maximum_subarray_sum_1'
3535
]
3636

3737
def _merge(array, sl, el, sr, er, end, comp):
@@ -1852,9 +1852,10 @@ def partition(array, lower, upper):
18521852

18531853
return array
18541854

1855-
def maximum_subarray_sum(array, **kwargs):
1855+
def maximum_subarray_sum_1(array, **kwargs):
18561856
"""
1857-
Finds the maximum subarray sum of the given array.
1857+
Finds the maximum subarray sum of the given array using a brute force approach.
1858+
18581859
Parameters
18591860
==========
18601861
array: OneDimensionalArray
@@ -1879,33 +1880,37 @@ def maximum_subarray_sum(array, **kwargs):
18791880
The backend to be used.
18801881
Optional, by default, the best available
18811882
backend is used.
1883+
18821884
Returns
18831885
=======
18841886
output: int
18851887
The maximum subarray sum.
1888+
18861889
Examples
18871890
========
1888-
>>> from pydatastructs import OneDimensionalArray as ODA, maximum_subarray_sum
1891+
>>> from pydatastructs import OneDimensionalArray as ODA, maximum_subarray_sum_1
18891892
>>> arr = ODA(int, [-2, 1, -3, 4, -1, 2, 1, -5, 4])
1890-
>>> maximum_subarray_sum(arr)
1893+
>>> maximum_subarray_sum_1(arr)
18911894
6
18921895
>>> arr = ODA(int, [1, 2, 3, 4, 5])
1893-
>>> maximum_subarray_sum(arr)
1896+
>>> maximum_subarray_sum_1(arr)
18941897
15
1898+
18951899
References
18961900
==========
18971901
.. [1] https://en.wikipedia.org/wiki/Maximum_subarray_problem
18981902
"""
18991903
raise_if_backend_is_not_python(
1900-
maximum_subarray_sum, kwargs.get('backend', Backend.PYTHON))
1904+
maximum_subarray_sum_1, kwargs.get('backend', Backend.PYTHON))
19011905
start = kwargs.get('start', 0)
19021906
end = kwargs.get('end', len(array) - 1)
19031907
comp = kwargs.get('comp', lambda u, v: u <= v)
19041908

1905-
max_sum = array[start]
1906-
max_ending_here = array[start]
1907-
for i in range(start + 1, end + 1):
1908-
max_ending_here = max(array[i], max_ending_here + array[i])
1909-
max_sum = max(max_sum, max_ending_here)
1909+
max_sum = float('-inf')
1910+
for i in range(start, end + 1):
1911+
curr_sum = 0
1912+
for j in range(i, end + 1):
1913+
curr_sum += array[j]
1914+
max_sum = max(max_sum, curr_sum)
19101915

19111916
return max_sum

pydatastructs/linear_data_structures/tests/test_algorithms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cocktail_shaker_sort, quick_sort, longest_common_subsequence, is_ordered,
66
upper_bound, lower_bound, longest_increasing_subsequence, next_permutation,
77
prev_permutation, bubble_sort, linear_search, binary_search, jump_search,
8-
selection_sort, insertion_sort, intro_sort, maximum_subarray_sum, Backend)
8+
selection_sort, insertion_sort, intro_sort, maximum_subarray_sum_1, Backend)
99

1010
from pydatastructs.utils.raises_util import raises
1111
import random

pydatastructs/utils/tests/test_code_quality.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def _apis():
174174
pyds.Trie, pyds.TrieNode, pyds.SkipList, pyds.RangeQueryStatic, pyds.RangeQueryDynamic, pyds.SparseTable,
175175
pyds.miscellaneous_data_structures.segment_tree.OneDimensionalArraySegmentTree,
176176
pyds.bubble_sort, pyds.linear_search, pyds.binary_search, pyds.jump_search,
177-
pyds.selection_sort, pyds.insertion_sort, pyds.quick_sort, pyds.intro_sort, pyds.maximum_subarray_sum]
177+
pyds.selection_sort, pyds.insertion_sort, pyds.quick_sort, pyds.intro_sort, pyds.maximum_subarray_sum_1]
178178

179179
def test_public_api():
180180
pyds = pydatastructs

0 commit comments

Comments
 (0)