```c
int maxSubArray(int* nums, int numsSize){
int ThisSum, MaxSum, j; int GateofNeg =0 ;
ThisSum = MaxSum = 0;
for ( j = 0; j < numsSize; j++)
{
ThisSum += nums[j];
if (ThisSum > MaxSum)
{MaxSum = ThisSum;
GateofNeg=1;}
else if (ThisSum < 0)
ThisSum = 0;
}
if (ThisSum == 0&&GateofNeg==0)
{
MaxSum = nums[0];
for (j = 0; j < numsSize; j++)
{
ThisSum = nums[j];
if (ThisSum > MaxSum)
MaxSum = ThisSum;
}
}
return MaxSum;
}
int maxSubArray(int* nums, int numsSize){
int res = 0, max = INT_MIN;
for(int i = 0; i < numsSize; i++) {
res = res <= 0 ? nums[i] : res + nums[i];
max = max < res ? res : max;
}
return max;
```c
}
方法总结
//没做啥修改但是对我更好理解了
int maxSubArray(int* nums, int numsSize){
int res = 0, max = INT_MIN;
for(int i = 0; i < numsSize; i++) {
if(res <= 0)res=nums[i];//一旦遇见0点情况 开始重新累加,因为之前的正数永远无法影响到下一个增长了
else res=res + nums[i];//先判断正负累加情况
if(max < res)max=res;//将最好的情况存下
else max=max;
}
return max;
}