最大子序列和问题
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; // } }