https://leetcode.com/problems/maximum-subarray/
| -2 | 1 | -3 | 4 | -1 | 2 | 1 | -5 | 4 |
最初の3つの合計(-2 + 1 -3)はマイナスになるので、 そのため subarray のスタートは 4 もしくは 4以降の数字になる。
合計が正の数になる場合は保持しておく。 変数に0 を代入して、 iterate しながら数字を追加していく。 合計がマイナスになる場合は保持する必要がないので、0 にする。
Time complexity: O(n) Mem complexity: O(1)
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
max_subarray = nums[0]
current_subarray = 0
for n in nums:
if current_subarray < 0:
current_subarray = 0
current_subarray += n
max_subarray = max(max_subarray, current_subarray)
return max_subarray