LeetCode 53.最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

 

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

 

修改原数组解法,如果当前值加上一个值大于当前的值,则让当前值改为相加后的值

var maxSubArray = function(nums) {
    for(let i=1;i<nums.length;i++){
        if(nums[i-1] + nums[i]>nums[i]) {
            nums[i] = nums[i-1] + nums[i];
        }
    }
    return Math.max(...nums);
};

 不修改原数组方法

var maxSubArray = function(nums) {
    let cur;
    let pre;
    let sum;
    cur = pre = sum = nums[0];
    for(let i = 1;i<nums.length;i++) {
        if(pre >= 0) {
            cur = nums[i] + pre;
            pre = cur;
        }else {
            cur = nums[i];
            pre = cur;
        }
        sum = sum>pre? sum : pre;
    }
    return sum;
}

reduce方法

var maxSubArray = function(nums) {
    let max = -Infinity;
    nums.reduce(function(t,val,i){
        t = t>0? t+val : val;
        if(max <= t) {
            max = t
        }
        console.log(t)
        return t;
    },0)
    return max;
}

 

posted @ 2021-03-14 10:52  JMH0113  阅读(39)  评论(0)    收藏  举报