一.题目解析:

算法讲解:
1.状态表示:
dp[i]表示以i位置为结尾,子数组的和最大
2.状态转移方程

3.初始化
我们可以在前面加上一个虚拟节点,结合状态转移方程和状态表示,可以发现越界位置,并且d[0]以0位置为结尾,子数组的和最大,要不影响后面填表应该为最小值min
4.填表顺序
从左向右
5.返回值
返回dp表的最大值
二.代码实现:
cpp
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();
vector<int>dp(n+1);
int ret=INT_MIN;
for(int i=1;i<=n;i++)
{
dp[i]=max(dp[i-1]+nums[i-1],nums[i-1]);
ret=max(dp[i],ret);
}
return ret;
}
};