题目:
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
解题思路:
因为是求最大和,所以我们应该保证我们的和时刻是正数,同时额外设置一个数来时刻记录最大和,一旦和为负数,我们就应该丢弃之前的所有和,来保证接下来的计算。
以例题为例子,我们首先记录-2是目前最大和,但是他是负数,所以我们丢弃当前的和,使得记录的最大和为-2,当前的和为0
接下来加上1,1>-2,所以,当前最大和成为1,当前和也为1,依次类推
只需要返回记录中的最大值即可。
int maxSubArray(int* nums, int numsSize)
{
int count = 0;
int max = -2147483648;//设置一个很大的负数保证负数也能被记录最大和
for(int i = 0;i<numsSize;i++)
{
count+=nums[i];//求出当前的和
if(count>max)
{
max = count;//记录最大值
}
if(count<0)
{
count = 0;//当前和为负,就丢弃前面相加的数值,同时也保证能记录负数
}
}
return max;
}