public class Solution {
public int maxSubArray(int[] nums) {
int start=0;
int end=nums.length-1;
return FindMax(nums,start,end);
}
public int FindMax(int[] nums,int start,int end)
{
int left_sum,right_sum,cross_sum;
int mid=(start+end)/2;
if(start==end)
return nums[start];
left_sum=FindMax(nums,start,mid);
right_sum=FindMax(nums,mid+1,end);
cross_sum=FindCross(nums,start,mid,end);
if(left_sum>=right_sum&&left_sum>=cross_sum)
return left_sum;
else if(right_sum>=left_sum&&right_sum>=cross_sum)
return right_sum;
else
return cross_sum;
}
public int FindCross(int[] nums,int start,int mid, int end)
{
int left_sum=Integer.MIN_VALUE;
int sum=0;
for(int i=mid;i>=start;i--)
{
sum+=nums[i];
if(sum>left_sum)
{
left_sum=sum;
}
}
int right_sum=Integer.MIN_VALUE;
sum=0;
for(int i=mid+1;i<=end;i++)
{
sum+=nums[i];
if(sum>right_sum)
{
right_sum=sum;
}
}
return left_sum+right_sum;
}
}
Maximum Subarray
最新推荐文章于 2019-07-03 04:34:57 发布