码迷,mamicode.com
首页 > 其他好文 > 详细

最大连续子序列和

时间:2020-05-03 10:36:15      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:vector   动态   nbsp   sub   subarray   cto   turn   连续子数组   包含   

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray

最好动态规划吧,分治有点折磨人,考虑的东西有点多

class Solution {
public:
    int merge(int l,int r,vector<int>& nums)
    {
        if(l==r) return nums[l];
         int mid=(l+r)>>1;
         int c1=0,c2=0,c3=0;
         if(mid>=l) c1=merge(l,mid,nums);//左边最优
         if(mid+1<=r) c2=merge(mid+1,r,nums);//右边最优
         int sum1=0,max1;
         max1=nums[mid];
         for(int i=mid;i>=0;i--)
         {
             sum1+=nums[i];
             max1=max(max1,sum1);
         }
         int sum2=0,max2;max2的初始值要分情况讨论
         if(mid+1<=r) max2=nums[mid+1];
         else max2=0;
         for(int i=mid+1;i<=r;i++)
         {
             sum2+=nums[i];
             max2=max(max2,sum2);
         }
         c3=max1+max2;
         return max(max(c1,c3),c2);
         
    }
    int maxSubArray(vector<int>& nums) {
        int n=nums.size();
        if(n==1) return nums[0];
        
        return merge(0,n-1,nums);

    }
};

 

最大连续子序列和

标签:vector   动态   nbsp   sub   subarray   cto   turn   连续子数组   包含   

原文地址:https://www.cnblogs.com/Charls/p/12820892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!