最大连续子数组的和
const getMaxSubSum = (arr) => {
let maxSum = 0;
let partialSum = 0;
for (let item of arr) {
partialSum += item;
maxSum = Math.max(partialSum, maxSum);
console.log('partialSum', partialSum)
console.log('maxSum', maxSum)
if (partialSum < 0) partialSum = 0;
}
return maxSum;
};
console.log('let arr = [100, -9, 2, -3, 5]', getMaxSubSum(arr));
- getMaxSubSum([-1, 2, 3, -9]) == 5
- 0 + (-1) = -1 => Math.max(-1, 0) => maxSum = 0, partialSum => 0
- 0 + 2 = 2 => Math.max(2, 0) => maxSum = 2, partialSum => 2
- 2 + 3 = 5 => Math.max(5, 2) => maxSum = 5, partialSum => 2
- 2 + (-9) = -7 => Math.max(-7, 5) => maxSum = 5, partialSum => 0
- getMaxSubSum([2, -1, 2, 3, -9]) == 6
- getMaxSubSum([-1, 2, 3, -9, 11]) == 11
- getMaxSubSum([-2, -1, 1, 2]) == 3
- getMaxSubSum([100, -9, 2, -3, 5]) == 100
- getMaxSubSum([1, 2, 3]) == 6
这个方法,maxSum只算最大值,而partialSum 每次遇到小的会重新置0,重新计算