标签: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