求连续子序列的最大值
2015-04-17 本文已影响57人
研途更疯狂
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int count=scan.nextInt();
int[] result=new int[3*count];
for(int i=0;i<count;i++){
int a=scan.nextInt();
int[] a1=new int[a];
for(int j=0;j<a;j++){
a1[j]=scan.nextInt();
}
int[] b=maxSubArraySum3(a1);
for(int k=0;k<b.length;k++){
result[i*3+k]=b[k];
}
}
for(int k=1;k<count;k++){
System.out.println("Case "+k+":");
System.out.println(result[k*3-3]+" "+result[k*3-2]
+" "+result[k*3-1]);
System.out.println();
}
System.out.println("Case "+count+":");
System.out.println(result[count*3-3]+" "+result[count*3-2]
+" "+result[count*3-1]);
}
static int[] maxSubArraySum(int[] a){
int sum=0;
int mStart = 0,mEnd = 0;
for(int start=0;start<a.length;start++){
for(int end=start;end<a.length;end++){
int thissum=0;
for(int index=start;index<=end;index++){
thissum+=a[index];
}
if(thissum>sum){
sum=thissum;
mStart=start;
mEnd=end;
}
}
}
return new int[]{sum,mStart+1,mEnd+1};
}
static int[] maxSubArraySum2(int[] a){
int sum=0;
int mStart = 0,mEnd = 0;
for(int start=0;start<a.length;start++){
int thissum=0;
for(int end=start;end<a.length;end++){
thissum+=a[end];
if(thissum>sum){
sum=thissum;
mStart=start;
mEnd=end;
}
}
}
return new int[]{sum,mStart+1,mEnd+1};
}
static int[] maxSubArraySum3(int[] a){
int thissum=0;int maxsum=0;int start=0;int end=0;
for(int j=0;j<a.length;j++){
thissum+=a[j];
if(thissum<0){
thissum=0;
start=j+1;
}else if(thissum>maxsum){
maxsum=thissum;
end=j;
}
}
return new int[]{maxsum,start+1,end+1};
}
}