核心思路就是看当前最大和大于0还是小于0,如果大于0就并入最大子序列和的候选集,否则就以当前的元素为新序列
思路一:动态规划dp
nums[i-1]记录当前最大和,若其大于0就可以组成最大序列的候选项,若小于0则nums[i]为新序列
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range( 1, len(nums)):
nums[i] = nums[i] + max(nums[i - 1], 0)
return max(nums)
思路二:
与思路一类似,但是是实时更新最大值的
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = nums[0]
summ = 0
for i in nums:
if summ >= 0:
summ += i
else:
summ = i
res = max(res, summ)
return res