dp[0] = nums[0]; int res = dp[0]; for (int i = 1; i < nums.size(); i++) { dp[i] = max(dp[i-1]+nums[i], nums[i]); if (dp[i] > res) res = dp[i];// 保存连续子数组最大和 }
int res = INT32_MIN; int sum = 0; // [-1] for (int i = 0; i < nums.size(); i++) { sum += nums[i]; // 先使用sum更新res,否则先判断sum<0的话会把sum的值变为0,就丢失了原来的值了。 if (sum > res) res = sum;// 先更新res if (sum < 0) sum = 0; // 再把小于0的sum变为0 }