SOURCE

// 当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和
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]));
console 命令行工具 X clear

                    
>
console