问题描述与解题思路
确定本题的状态表示
dp[i]表示的是以i位置元素为结尾的所有nums子数组中的最大和(每一个以i位置元素为结尾的nums子数组,其所有元素加起来都有一个和,我们要求的就是最大的那个和)

确定本题的状态转移方程

返回值
这个题和其他的题普通的地方在于其他题我们一般都是返回这个动态规划结束的时候返回它最后的那个元素。就是我们要的结果,但是因为这个题我们状态表示的定义比较特殊,dp[n]代表的含义是以最后一个元素为结尾的所有子数组中的最大和,他并不是我们题目要的那个最大的和,因此我们不能直接返回dp[n],而是应该遍历dp数组,找出其中最大的元素返回
代码实现
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();
vector<int> dp(n+1,0);
int ret=0xc1c1c1c1;
for(int i=1;i<=n;i++){
dp[i]=max(dp[i-1]+nums[i-1],nums[i-1]);
if(dp[i]>ret) ret=dp[i];
}
return ret;
}
};

1451

被折叠的 条评论
为什么被折叠?



