剑指 Offer 42. 连续子数组的最大和

Posted on 2022-03-10 23:38  AcTourist  阅读(14)  评论(0)    收藏  举报

一、题目

 

二、题目分析

从左到右进行求和,用一个max变量来保存最大的数组和
如果当前求和的结果sum,大于0的话,就继续加当前元素
如果当前求和的结果sum小于0的话,那么加上当前元素只会对最终数组和起减少的作用,而不是增大数组和,所以如果当前求和的结果sum小于0的话则直接以当前元素为起点新起数组求最大数组和

三、代码分析

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let ans = nums[0];
    let sum = 0;
    for(const n of nums){
        if(sum>0){
            sum+=n;
        }else{
            sum = n;
        }
        ans = Math.max(ans,sum);
    }

    return ans;
};

四、其他分析

  动态规划解决题,但是我目前还没有完全懂动态规划解题思路,暂且先放着,明天补回来,做下一题