0
点赞
收藏
分享

微信扫一扫

最大子数组和,力扣

谷中百合517 2022-02-15 阅读 44

题目:

给你一个整数数组 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;

}
举报

相关推荐

0 条评论