题目
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组,求所有子数组的和的最大值–要求时间复杂度为O(n)
案例
-
输入
-
nums = [-2,1,-3,4,-1,2,1,-5,4]
-
-
输出
-
6
-
思路
- 循环遍历数组,在遍历过程中将每个元素当做连续子数组的尾部,并看看当前元素是否为头部
- 若是当前元素前面有连续元素之和大于0 ,说明当前元素不是头部,需要和前面元素相加;
- 若是当前元素前面无连续元素之和大于0,说明当前元素是头部;
实现
maxSum(list){
for(let i=1;i<list.length;i++){
list[i] += Math.max(list[i-1],0)
}
return Math.max(...list)
}