输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。
思路: 使用数组的第一个值初始化 当前的数组和、最大的数组和
遍历数组从第二个数开始累加 若累加和小于0 则放弃前面的累加和
从当前元素开始重新累加 累加之后比较与最大和比较 若大于maxSum则将值替换为curSum
function getMaxSum(arr) {
var curSum = arr[0];
var maxSum = arr[0];
for(var i=1;i<arr.length;i++) {
if(curSum <= 0) {
curSum = arr[i]
} else {
curSum += arr[i]
}
if(curSum>maxSum) {
maxSum = curSum
}
}
console.log(maxSum) // 18
}
getMaxSum([1,-2,3,10,-4,7,2,-5])