最大子序和就是连续的数组项之和最大,因此从头到尾遍历一次。一直相加,如果相加的s开始小于等于0,则证明到这一项的时候前面的序列不可能是最大子序和的序列。因此重新开始累加就好了。
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
let s = 0;
let ans = nums[0];
nums.forEach(n => {
if (s > 0) {
s += n;
} else {
s = n;
}
ans = Math.max(ans, s);
});
return ans;
};