public MaxRange MaxRangeSonArray(int[] array){
int maxStart=0,maxEnd=0;
int sumMax=array[0];
for (int i=1;i<array.length;i++){
intsum=sumMax;
for (int k=maxEnd+1;k<=i;k++){
sum+=array[k];
}
if (sum>sumMax){
sumMax=sum;
maxEnd=i;
}
sum=0;
int rightToLeft=maxStart;
for (int j=i;j>=maxStart;j--){
sum+=array[j];
if (sum>sumMax){
maxEnd=i;
rightToLeft=j;
sumMax=sum;
}
}
maxStart=rightToLeft;
}
returnnew MaxRange(sumMax,maxStart,maxEnd);
}
classMaxRange{int start;
int end;
intsum;
public MaxRange(int max, int maxLeftIndex, int maxRightIndex) {
this.start=maxLeftIndex;
this.end=maxRightIndex;
this.sum=max;
}
}
publicstaticvoid main(String[] args) {
Suanfa1 s= new Suanfa1();
Random random=new Random();
intarray[]=newint[8];
for (int i=0;i<array.length;i++){
int rand=random.nextInt(1000);
rand=random.nextInt(2)==0?rand*-1:rand;
array[i]=rand;
}
for (int a:array){
System.out.print(a+"__");
}
System.out.println("------------");
MaxRange maxRange=s.findMaxMumSubArray(array,0,array.length-1);//递归实现
MaxRange maxRange1=s.MaxRangeSonArray(array);//非递归实现for (int i=maxRange.start;i<=maxRange.end;i++){
System.out.print(array[i]+"__");
}
System.out.println();
for (int i=maxRange1.start;i<=maxRange1.end;i++){
System.out.print(array[i]+"__");
}
}
运行结果:
-65__-881__565__-871__131__-686__-581__79__------------
565__
565__
-58__926__339__-611__-599__194__986__453__------------
926__339__-611__-599__194__986__453__
926__339__-611__-599__194__986__453__
364,680,-228,612,760,-855,-482,135,------------
364,680,-228,612,760,
364,680,-228,612,760,