求连续子序列的最大值

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};
          
      }
      
}
上一篇 下一篇

猜你喜欢

热点阅读