题目:
链接:https://leetcode.cn/problems/maximum-subarray/
思路:
使用动态规划思想
首先先看题目要求,寻找最大和的连续子数组
dp[i]定义为从0到i的连续子数组和的值的集合
dp状态为max
根据题目可得 如果前i个连续子数组和小于0 则不与后面的子数组接上。
dp状态转移为dp[i]=nums[i]+max(dp[i-1],0)
代码:
class Solution {
public:
int maxSubArray(vector& 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;
}
};



