1. 程式人生 > >最大連續子序列和可能的最優解

最大連續子序列和可能的最優解

問題描述:

給定一個整數序列,a0, a1, a2, …… , an(項可以為負數),求其中最大的子序列和。如果所有整數都是負數,那麼最大子序列和為0;

解決這個問題的演算法有很多種,比如兩重迴圈的暴力破解,或者利用分治的思想,但是還有一種線性時間複雜度的演算法:線上處理,可以比較好的解決這個問題。註釋在程式碼中。

public class MaxSum {

	//演算法:線上處理
	public static int maxSum(int[] a) {
		int sum=0;
		int lastSum=0;
		for(int i=0;i<a.length;i++) {
			lastSum+=a[i];
			//如果比sum大,則更新最大值
			if(lastSum>sum) {
				sum=lastSum;
			}
			//這裡是關鍵,如果當前和為負數,在不可能為後面的和做出貢獻,只能使後面的和變小
			//所以丟棄它
			else if(lastSum<0){   
				lastSum=0;
			}
		}
		return sum;
	}
	public static void main(String[] args) {
		int[] a={4,-3,5,-2,-1,2,6,-2};
		System.out.println(maxSum(a));
	}

}