Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
[-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray[4,-1,2,1]
has the largest sum =6
.
题意:找出和最大的连续子序列。
这道题其实一个月前开始就开始写了 ,但是错了好多次。之前想的是,不就是求Sum[i…j]最大嘛,那直接遍历所有i和j的所有可能取值就行了。复杂度为O(n^2),理所当然的超时了。
1 | class Solution { |
刚好这两天做了一道十分相似的题目:560. Subarray Sum Equals K ,了解到了前缀和这种神奇的东西。所以一个月后再来看这道之前一直没解决的问题,还是觉得当时实在是太naive了。这不也就利用前缀和就可以在O(N)的复杂度内解决的么?
假设sum以是j为结尾的前缀和,那么只需要减去j以前的最小的前缀和,那么就可以得到以j为结尾的和最大连续子序列。遍历每个j,然后维护最大值就ok啦~~注意:preSum[-1] = 0。
1 | class Solution { |