Maximum Subarray(分治法)

来源:互联网 发布:淘宝拍卖会的字画真假 编辑:程序博客网 时间:2024/05/17 03:48

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

和上一篇类似

我们把问题分成三份

1.最大在左边

2.最大在右边

3.最大在中间

int Max(int a,int b){    return a>b?a:b;}int slove(int *nums,int left,int right){    if(left==right) return nums[left];    int mid=(right-left)/2+left;    int res=Max(slove(nums,left,mid),slove(nums,mid+1,right));    int lo=mid;    int hi=mid+1;    int rightarea=0;    int leftarea=0;    int maxright=nums[hi];    int maxleft=nums[lo];    for(int i=hi;i<=right;i++)    {        rightarea+=nums[i];        maxright=Max(maxright,rightarea);    }    for(int i=lo;i>=left;i--)    {        leftarea+=nums[i];        maxleft=Max(maxleft,leftarea);    }    res=Max(res,maxright+maxleft);    return res;}int maxSubArray(int* nums, int numsSize) {    return slove(nums,0,numsSize-1);}
这两篇文章做的糙了点主要是给自己复习用的,见谅,如果有不理解的可以底下评论看到会立即回复