代码如下:
思路:
方法一:
package sf_2;
public class Main {
public static int f(int a[],int begin,int end){
int sum=0;
if(end==begin){
if(a[begin]>0)
sum= a[begin];
sum=0;
}else{
int k=(begin+end)/2;
int t1=f(a,begin,k);
int t2=f(a,k+1,end);
int t3a=0;
sum=0;
for(int i=k-1;i>=begin;i--){
sum+=a[i];
if(sum>t3a)
t3a=sum;
}
int t3b=0;
sum=0;
for(int i=k;i<end;i++){
sum+=a[i];
if(sum>t3b)
t3b=sum;
}
sum=t3a+t3b;
if(t1>sum)
sum=t1;
if(t2>sum)
sum=t2;
}
return sum;
}
public static int work(int a[]){
return f(a,0,a.length-1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(work(new int[]{2,4,-7,5,2,-1,2,-4,3}));
}
}
方法二:
package sf_2;
public class Main {
public static int f(int a[],int begin,int end){
/*
* 比如从5到6,则只包括5这个元素。
*/
if(end-begin==1){
if(a[begin]>0)
return a[begin];
return 0;
}
int k=(begin+end)/2;
int t1=f(a,begin,k);
int t2=f(a,k,end);
int t3a=0;
int sum=0;
for(int i=k-1;i>=begin;i--){
sum+=a[i];
if(sum>t3a)
t3a=sum;
}
int t3b=0;
sum=0;
for(int i=k;i<end;i++){
sum+=a[i];
if(sum>t3b)
t3b=sum;
}
int t3=t3a+t3b;
int max=0;
if(t1>max)
max=t1;
if(t2>max)
max=t2;
if(t3>max)
max=t3;
return max;
}
public static int work(int a[]){
return f(a,0,a.length);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(work(new int[]{2,4,-7,5,2,-1,2,-4,3}));
}
}