// 当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和
var maxSubArray = function(nums) {
if (nums.length == 0 || nums == null) { // 非空判断
return 0;
}
var maxSum = 0, currSum = 0;
nums.forEach(function (value,index,nums) {
currSum += value;
if (currSum < 0) { // 和小于0就直接置0
currSum = 0;
}
maxSum = (maxSum < currSum) ? currSum : maxSum;
});
if (maxSum == 0) {
return Math.max(...nums); // 拓展运算符将数组转换为nums.length个参数传入函数
}
return maxSum;
};
console.log(maxSubArray([-2,1,-3,4,-1,2,1,-5,4]));