题目来源:https://leetcode.cn/problems/maximum-subarray/description/
C++题解(来源代码随想录):难点在于判断什么时候更新count。
是当nums[i]为正数吗?那要nums没有正数怎么办;
是当nums[i]比之前子数组和大吗?对于[8,-19,5,-4,20] 在5的位置就不会被更新,所以找不到正确值21;
所以,是在之前子数组和小于0处更新!之前的子数组和小于0就没必要再用了,加啥都会拖累新的和;大于0的话,如果递增是会被记录更新的。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT32_MIN;
int count = 0;
for (int i = 0; i < nums.size(); i++) {
count += nums[i];
if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置)
result = count;
}
if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
}
return result;
}
};