class Solution
{
public:
int maxSubArray(vector<int>& nums)
{
int sum=nums[0];
int re=nums[0];
//主要思路是维持一个最大值re,假设其不全为负数,那么在累加过程之中,如果累加和小于0说明后面不能以其为前缀了,则重新开始计数
//下面给出了若全为负数的处理办法
//时间复杂度O(n)
for(int i=1;i<nums.size();i++)
{
if(nums[i]>sum&&sum<0)
{
//为了避免第一个元素是-3,后续是-1,不能进行相加因为越加越小,但是可以用-1替代-3
sum=nums[i];
if(sum>re)
{
re=sum;
}
continue;
}
if(sum==0&&nums[i]<0)
{
continue;
}
if(sum==0&&nums[i]>0)
{
sum=sum+nums[i];
if(sum>re)
{
re=sum;
}
continue;
}
if(sum>0)
{
sum=sum+nums[i];
if(sum>re)
{
re=sum;
}
if(sum<0)
{
sum=0;
}
continue;
}
}
return re;
}
};