// 解法一:dp
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sz=nums.size();
if(sz==1) return nums[0];
int ans=nums[0];
for(int i=1;i<sz;i++){
nums[i]=max(nums[i],nums[i-1]+nums[i]);
ans=max(ans,nums[i]);
}
return ans;
}
};
// 解法二:滑动窗口
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if(nums.size()==1) return nums[0];
int l=0,r=0;
int sum=0;
int ans=INT_MIN;
while(r<nums.size()){
int c=nums[r];
r++;
sum+=c;
while(sum<c){ // 如果加上当前元素后sum比当前元素的值更小,收缩窗口
int d=nums[l];
sum-=d;
l++;
}
ans=max(sum,ans);
}
return ans;
}
};