首页 > 其他 > 详细

53. 最大子序和

时间:2020-09-01 13:07:11      阅读:33      评论:0      收藏:0      [点我收藏+]

53. 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
int maxSubArray(int* nums, int numsSize){
    if(numsSize==0)
        return 0;
    if(numsSize==1)
        return nums[0];
    
    return helper(nums,0,numsSize-1);
}
int helper(int *nums,int l,int r)
{
    int mid=(l+r)/2;
    if(l>=r)
        return nums[l];
    int left=helper(nums,l,mid-1);
    int right=helper(nums,mid+1,r);
    
    int lsum=0,rsum=0;
    int max1=0;
    int max2=0;
    int max;
    
    for(int i=mid-1;i>=l;i--)
    {
        lsum+=nums[i]; 
        max1=max1>lsum?max1:lsum;
    }
    for(int j=mid+1;j<=r;j++)
    {
        rsum+=nums[j];
        max2=max2>rsum?max2:rsum;
    }
    max=left>right?left:right;
    return max>(max1+max2+nums[mid])?max:(max1+max2+nums[mid]);
}

  ①考虑中间元素时,左右两边序列的最大序列和最小应为0

  输入:
  [-1,0,-2]
  预期:
  0
  
 

53. 最大子序和

原文:https://www.cnblogs.com/KIROsola/p/13595522.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!