leetcode53.最大子序和

leetcode53.最大子序和

题目

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

用例

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

求解

普通方法

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let max_sum = nums[0];
    let tmp = nums[0];
    for(let i =1;i<nums.length;i++){
        if(tmp+nums[i]<nums[i]){
            max_sum = Math.max(tmp,nums[i],max_sum);
            tmp = nums[i];
        }else{
            tmp=nums[i]+tmp;
            max_sum = Math.max(tmp,max_sum)
        }
    }
    return max_sum
};

动态规划

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let dp =new Array(nums.length).fill(0)
    dp[0]=nums[0]
    for(let i=1;i<nums.length;i++){
        dp[i]=Math.max(dp[i-1]+nums[i],nums[i])
    }
    return Math.max.apply(null,dp)
};
posted @ 2021-11-12 14:29  BONiii  阅读(28)  评论(0)    收藏  举报