dp 力扣 53. 最大子数组和

力扣 53. 最大子数组和

题目:
链接:https://leetcode.cn/problems/maximum-subarray/
dp 力扣 53. 最大子数组和_第1张图片
思路:
使用动态规划思想
首先先看题目要求,寻找最大和的连续子数组
dp[i]定义为从0到i的连续子数组和的值的集合
dp状态为max

根据题目可得 如果前i个连续子数组和小于0 则不与后面的子数组接上。
dp 力扣 53. 最大子数组和_第2张图片

dp状态转移为dp[i]=nums[i]+max(dp[i-1],0)

代码:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int dp[100005]={0};
        int ans=-1e5;//初始数组最大值(数组会有负数)
        for(int i=1;i<=nums.size();i++){ 
            dp[i]=nums[i-1]+max(dp[i-1],0);  //状态转移
            ans = max(ans,dp[i]);//求连续子数组的最大值
        }
        return ans;
    }
};

dp 力扣 53. 最大子数组和_第3张图片

你可能感兴趣的:(c++,数据结构,动态规划,算法)