Contiguous Sequence: You are given an array of integers (both positive and negative). Find the contiguous sequence with the largest sum. Return the sum.
EXAMPLE
|
|
Hints: #537, #551, #567, #594, #614
解法1
可以先把数组变成一个累加数列,当前index sum值 = sum(当前元素 + 所有前面元素的)。
|
|
然后我们知道array[n~m]元素之和 = sumarray[m] - sumarray[n - 1],所以在计算区间之和的时候就能够减少很多循环。
如果给定一个index m,那么它能够形成的连续数列可以是:
|
|
那么我们可以从第一个元素开始,计算它所有的连续数列所能组成的和,然后是第二个元素,第三个元素。
代码:
|
|
那么时间复杂度是:
- 构建累加数列,O(n),n是数组长度。
- 求最大值,1 + 2 + … + n = O(n2)
解法2
|
|
换个思路:
- 记录两个数字:maxSum(最大sum值),prevSum(当前下标之前元素里的sum值)
- 遍历这个数组,如果prevSum + array[curr] > array[curr],那么prevSum += array[curr];否则 prevSum = array[curr]。
- 同时判断,prevSum 和 maxSum的大小。
举例:
|
|
这个方法的意思是,如果之前的sum加上当前数字对当前情况有提升,那么就将其相加。否则的话还不如直接用当前数字。然后在过程中取得最大的sum。
代码:
|
|
时间复杂度:O(n)
评论