一:题目
二:上码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
/**
动态规划:
1>:确定dp数组的含义以及下标的含义
dp[j]表示的是下标j之前的最大子数组和 这个就是还没有包括nums[j]
2>:确定dp数组的状态转移公式
dp[j] = max (dp[j-1]+nums[j],nums[j]);
//dp[j-1] + nums[j]:表示的是累加的和
//nums[j]:从头开始计算累加和 可能前面累加值小于0
3>:确定dp数组的初始化
dp[0] = nums[0];
因为dp[j] 可能要依赖 dp[j-1]
4>:确定dp数组的遍历顺序
从前向后
if(dp[j] > max) max = dp[j] //计算我们的最大值 也可以最后遍历整个dp数组进行求解
5>:举例验证
nums = [5,4,-1,7,8]
5 4 -1 7 8
dp: 5 9 8 15 23
*/
vector<int> dp(nums.size(),0);
int maxx = nums[0];//当剩下一个数的时候是可以解出来的
dp[0] = nums[0];
for (int i = 1; i < nums.size(); i++) {
dp[i] = max(dp[i-1]+nums[i],nums[i]);
if(dp[i] > maxx) maxx = dp[i];
}
return maxx;
}
};