思路:
- DP,设置数组res,存储以i结尾的连续数组和的最大值。如果i之前子数组最大和小于等于0,那么res[i] = nums[i],否则res[i] = nums[i] + res[i-1]。复杂度为\(O(n)\)。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum = INT_MIN;
vector<int> res(nums.size(),0);
res[0] = nums[0];
for(int i = 1; i < nums.size(); i++){
if(res[i-1] > 0) res[i] = res[i-1] + nums[i];
else res[i] = nums[i];
}
for(int i = 0; i < res.size(); i++){
if(res[i] > sum) sum = res[i];
}
return sum;
}
};