1. 第一种方法,pre_sum是无脑加,max是对比“pre_sum减去前面一个最小的元素”和current max的对比。把我自己绕进去了。上代码:
def maxSubArray(self, nums):
if len(nums)==0:
return 0
pre_sum = 0
min_sum = 0
maximum = -sys.maxsize - 1
for item in nums:
pre_sum += item
maximum = max(maximum,pre_sum-min_sum)
min_sum = min(min_sum,pre_sum)
return maximum
2. 第二种方法就更好理解的多。也是无脑加,当得数小于0,摒弃前面的数,把curr_sum重新设为0再加上当前的数再继续重新往后加。相当于把真个list分成了好几块,选取sum最大的一块。
def maxSubArray(self, nums):
if len(nums)==0:
return 0
curr_sum = 0
max_sum = -9999
for i in range(0,len(nums)):
if curr_sum < 0:
curr_sum = 0
curr_sum += nums[i]
max_sum = max(curr_sum,max_sum)
return max_sum