Leetcode 53. 最大子序和(简单)动态规划

labuladong讲解

53. 最大子序和(简单)

题目:

给你输入一个整数数组 nums,请你找在其中找一个和最大的子数组,返回这个子数组的和。

比如说输入 nums = [-3,1,3,-1,2,-4,2],算法返回 5,因为最大子数组 [1,3,-1,2] 的和为 5。

 

思路:

定义dp[i]为以i为结尾的子数组。dp[i]=max(nums[i],dp[i-1]+nums[i])

 

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n=nums.size();
        vector<int> dp(n);
        dp[0]=nums[0];
        for(int i=1;i<n;++i){
            dp[i]=max(nums[i],dp[i-1]+nums[i]);
        }
        int ret=nums[0];
        for(int i=1;i<n;++i){
            ret=max(ret,dp[i]);
        }
        return ret;
    }
};

 

posted @ 2022-03-01 15:37  鸭子船长  阅读(32)  评论(0编辑  收藏  举报