leetcode(24)-最大子序列和

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

方法1:暴力解法

很显然会报 超过时间限制。

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let begin = 0;
    let end = 1;
    let maxSum = Number.NEGATIVE_INFINITY;
    for(let i = 0; i<nums.length;i++){
        for(let j =i+1;j<=nums.length;j++){
            let temSum = 0;
            nums.slice(i,j).forEach(el=>{
                temSum+=el;
            })
            if(temSum>maxSum){
                maxSum = temSum;
                begin = i;
                end = j;
            }
        }
    }
    return maxSum;
};

 方法2:官方题解-动态规划

var maxSubArray = function(nums) {
    let pre = 0, maxAns = nums[0];
    nums.forEach((x) => {
        pre = Math.max(pre + x, x);
        maxAns = Math.max(maxAns, pre);
    });
    return maxAns;
};
//我的写法
/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
   let res = [];
   res.push(nums[0]);
   let maxSum = nums[0];
   for(let i = 1; i<nums.length;i++){
       res.push(Math.max(nums[i]+res[i-1],nums[i]));
       maxSum = Math.max(res[i],maxSum);
   }
   return maxSum;
};

 

posted @ 2021-05-19 22:14  KYSpring  阅读(44)  评论(0编辑  收藏  举报