- 問題描述:給定(可能是負整數)整數序列A1,A2,...,An,尋找(並標識)使的值最大的序列。如果所有的整數都是負的,那麼連續子序列的最大和是零。
public static int maxSubsequenceSum(int[] a){
int maxSum=0;
for(int i=0;i<a.length;i++)
for(int j=0;j<a.length;j++){
int thisSum=0; //當輸入全是負整數時,可以保證連續子序列之和等於0
for(k=i;k<=j;k++){
thisSum+=a[j]; //每次j加1後,都要進行一次a[i]+a[i+1]+...+a[j]的計算,是不是可以考慮改進該計算,第二種算法就是基於此
if(thisSum>maxSum){
maxSum=thisSum;
seqStart=i; //記錄連續子序列的起始位置
seqEnd=j; //記錄連續子序列的結束位置
}
}
}
return maxSum;
}
public static int maxSubsequenceSum(int[] a){
int maxSum=0;
for(int i=0;i<a.length;i++){
int thisSum=0;
for(j=i;j<a.length;j++{
thisSum+=a[j]; //基於第一種算法,先計算出a[i]+a[i+1]+...a[j-1]的和,那麼a[i]+...+a[j]只需要再做一次加法就可以了
if(thisSum>maxSum){
maxSum=thisSum;
seqStart=i;
seqEnd=j;
}
}
}
return maxSum;
}