April 14, 2024 11:22 PM (GMT+8)
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
int res = nums[0];
for (int i = 1; i < n; i ++) {
if (nums[i - 1] > 0) {
nums[i] += nums[i - 1];
}
res = max(res, nums[i]);
}
return res;
}
};
April 20, 2024 11:49 PM (GMT+8)
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
vector<int> f(n + 1);
int res = INT_MIN;
for (int i = 1; i <= n; i ++) {
if (f[i - 1] > 0) {
f[i] = nums[i - 1] + f[i - 1];
} else {
f[i] = nums[i - 1];
}
res = max(res, f[i]);
}
return res;
}
};
当前 sum 为负数的时候立刻舍弃,从下一个元素重新计算“连续和”
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum = 0, res = INT_MIN;
for (int x : nums) {
sum +=x;
res = max(res, sum);
if (sum < 0) sum = 0; // greedy
}
return res;
}
};