自己写的暴力,超时
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT_MIN;
for (int i = 0; i < nums.size(); i++) {
int sum = 0;
if (nums.size() - i - 1 == 0) {
result = max(result, nums[i]);
break;
} else {
for (int j = i; j < nums.size(); j++) {
sum += nums[j];
result = max(result, sum);
}
}
}
return result;
}
};
注意内循环从j = i
开始而非i + 1
,所以其实没必要用if
分组:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT_MIN;
for (int i = 0; i < nums.size(); i++) {
int sum = 0;
for (int j = i; j < nums.size(); j++) {
sum += nums[j];
result = max(result, sum);
}
}
return result;
}
};
贪心
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT_MIN;
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
result = max(result, sum);
if (sum <= 0) sum = 0;
}
return result;
}
};
连续和sum < 0
时,直接舍弃掉前面所有加进来的连续序列,令sum = 0
然后从当前位置重新开始加