您的位置:首页 > 其它

53. Maximum Subarray

2016-06-15 01:04 375 查看
使用分治法来解题。

(1)只有0个元素或者1个元素 则直接返回

(2)求出middle位置 最大值 要么在middle左边 要么右边 要么两边都有 返回三种解法的最大值 则为最大值

class Solution {
private:
int maxSub(vector<int>&nums,int left,int right)
{
if(left==right)
return nums[left];
int middle=(left+right)/2;
int leftmax=maxSub(nums,left,middle);
int rightmax=maxSub(nums,middle+1,right);
int leftv=nums[middle];
int rightv=nums[middle+1];
int temp=0;
for(int i=middle;i>=left;i--)
{
temp+=nums[i];
if(temp>leftv)
leftv=temp;
}
temp=0;
for(int i=middle+1;i<=right;i++)
{
temp+=nums[i];
if(temp>rightv)
rightv=temp;
}
return max(leftmax,max(rightmax,(leftv+rightv)));
}
public:
int maxSubArray(vector<int>& nums) {
if(nums.size()==0)
return 0;
else
return maxSub(nums,0,nums.size()-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: