public int[] getResultInSonArray(int start,int end,int[] arr){
//结束条件
if(start==end){
int[] result = new int[3];
result[0] = start;
result[1] = end;
result[2] = arr[start];
return result;
}
int mid = (start+end)>>1;//向右移动;
int[] leftresult = getResultInSonArray(start, mid, arr);
int[] rightresult = getResultInSonArray(mid+1, end, arr);
int[] midresult = getResultInSonArrayIncludeMid(start,end,mid,arr);
if(leftresult[2]>rightresult[2]&&leftresult[2]>midresult[2]){
return leftresult;
}else if(rightresult[2]>leftresult[2]&&rightresult[2]>midresult[2]){
return rightresult;
}else {
return midresult;
}
//return null;
}
public int[] getResultInSonArrayIncludeMid(int start, int end, int mid,int[] arr){
int left_sum = 0;
int right_sum = 0;
int temp1 = Integer.MIN_VALUE; //左边最大值;
int temp2 = Integer.MIN_VALUE;//右边最大值;
int[] result = new int[3];
for(int i=mid;i>=start;i--){
left_sum += arr[i];
if(left_sum>temp1){
temp1 = left_sum;
result[0] = i;
}
}
for(int j = mid+1;j<end;j++){
right_sum += arr[j];
if(right_sum>temp2){
temp2 = right_sum;
result[1] = j;
}
}
int sum = 0;
for(int k=result[0];k<=result[1];k++){
sum+=arr[k];
}
result[2] = sum;
return result;
}
}