动态规划解法一
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int s = nums.size();
if (s == 1) {
return nums[0];
}
int mmax = nums[0];
for (int i = 1; i < s; i++) {
nums[i] = max(nums[i-1]+nums[i], nums[i]);
mmax = max(nums[i], mmax);
}
return mmax;
}
};
贪心解法二
一定要意识到一点,只要连续的几个数加起来是负数,那么它再加上一个数的值一定会比它本身小。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int s = nums.size(), sum = 0, mmax = nums[0];
for (int i = 0; i < s; i++) {
sum += nums[i];
mmax = max(sum, mmax);
if (sum < 0) {
sum = 0;
}
}
return mmax;
}
};