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);
}
这两篇文章做的糙了点主要是给自己复习用的,见谅,如果有不理解的可以底下评论看到会立即回复