一:题目
二:上码
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]:从头开始计算累加和 可能前面累加值小于03>:确定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 8dp: 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;}
};