题目:
输入一个整型数组,数组中有正数也有负数。数组中的一个或者连续多个整数组成一个子数组。求所有子数组的和的最大值。
思路:
我们可以试着从头到尾逐个累加示例数组中的每一个数字。举一个栗子:数组{1,-2,3,10,-4,7,2,-5}
初始值设为0,加了第一个数字1,结果为1,加了-2结果就变成-1,再加3的话,实际上只会让结果变得更小,所以我们就可以把前面的几个加过了的数字直接丢了,从第三位再开始看,13后减去4变成了9,这个时候我们发现,这个值在变小,但不确定后面的数字又没有很大的,所以我们先把13存起来,然后加完后面这个两个数后发现18>13,所以更新这个里面的数字为18.最后减5,结果在变小,且-5为数组最后一位,所以我们就可以返回最大值18了。
代码实现:
int maxSubArray(int* nums, int numsSize){
int ans = nums[0];
int curSum = nums[0];
for(int i = 1;i<numsSize;i++){
if((curSum + nums[i]) < nums[i])
curSum = nums[i];
else
curSum += nums[i];
if(ans<curSum)
ans = curSum;
}
return ans;
}