leetcode-53 最大子数组

题目:

找到一个整数数组的最大累加和子数组
例子:
Input: [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: [4,-1,2,1]有最大累加和=6。

这道题用到了Kadane‘s 算法。算法指出,在数组A中,如果我们知道一个以位置i为截至元素的最大累加和子数组Bi,那么在i+1位置上的最大累积和子数组Bi+1
要么是一个前缀为Bi的子数组,要么不是。Bi+1 = max(Bi+A[i+1],A[i+1])。

1
2
3
4
5
6
7
8
9
#python3
def maxSubArray(nums):
if len(nums) == 0:
return 0
cursum = maxsum = nums[0]
for num in nums[1:]:
cursum = max(num, num+cursum) #这行代码是对kadane’s的诠释,我们企图找到一个更长的子数组或者重新开始一个子数组
maxsum = max(maxsum, cursum) #maxsum用来存储最大子数组的历史纪录,并时刻刷新记录
return maxsum