最大子序列和问题

package com.test1;

public class Test3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test3 test=new Test3();
        int a[]={4,-3,5,-2,-1,2,6,-2};
        int n=8;
        int b=test.MaxSeqSum3(a,  n);
        System.out.println(b);

    }
    //在线处理
    //T(N)=O(N)
    public int MaxSeqSum1(int a[],int n){
        int thissum,maxsum;
        int i;
        thissum=maxsum=0;
        for(i=0;i<n;i++){
            thissum+=a[i];//向右累加
            if(thissum>maxsum){
                maxsum=thissum;//发现更大和则更新结果
            }else if(thissum<0){//如果当前子列和为负
                thissum=0;//则不能使后面的和增大,抛弃
            }
        }
        return maxsum;
    }
    //穷举法
    //T(N)=O(N^3)
    public int  MaxSeqSum2(int a[],int n){
        int thissum,maxsum;
        int i,j,k;
        maxsum=0;
        
        for(i=0;i<n;i++){
            for(j=i;j<n;j++){
                thissum=0;
                for(k=i;k<=j;k++){
                    thissum+=a[k];
                    if(thissum>maxsum){
                        maxsum=thissum;
                    }
                }
            }
            
        
    }
        return maxsum;
    }
    //
//    public int  MaxSeqSum3(int a[],int n){
//        int thissum,maxsum=0;
//        int i,j;
//        for(i=0;i<n;i++){
//            thissum=0;
//            for(j=i;j<n;j++){
//                thissum+=a[i];
//                if(thissum>maxsum){
//                        maxsum=thissum;
//                    }
//                }
//            
//            
//        
//    }
//        return maxsum;
//    }
}

 

posted @ 2015-04-01 23:04  勇敢的二米  阅读(139)  评论(0编辑  收藏  举报