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
最新推荐文章于 2018-08-12 15:56:00 发布
本文介绍了一种使用分治策略寻找具有最大和的连续子数组的算法实现。该算法通过递归地找到左半部分、右半部分以及跨越中点的最大子数组和,并返回这三个中的最大值。


419

被折叠的 条评论
为什么被折叠?



