最大連續子序列和可能的最優解
阿新 • • 發佈:2018-11-24
問題描述:
給定一個整數序列,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)); } }