找出一個數組中子陣列和的最大值
阿新 • • 發佈:2019-02-11
讓我們看這樣一個數組:[1, -2, 3, 4, -5, 6, -7]
很明顯,子陣列和的最大值是8,這個子陣列是[3, 4, -5, 6]
那麼我們怎麼找到最大值是多少呢?
我們假設從第一位開始對每一位加和,當加到3的時候,我們發現,之前的1+(-2)=-1,如果加上3的話等於2,還不如直接從3開始大一些,這時候我們果斷拋棄3前面的計算結果,從3開始重新加和。
當加到-5的時候,我們發現,之前的3+4=7,如果加上-5的話結果變小了,這個時候別急,畢竟加上-5結果2還是大於零的,加上-5的下一位肯定比下一位更大,所以這種時候放心大膽的加上就好。
那麼這時候,我們的規則就出來了:
(1)在遍歷到第 i 位時,如果當時的子陣列加和currentSum<0,那麼直接讓currentSum = sum[i];
(2)在遍歷到第 i 位時,如果當時的子陣列加和currentSum>=0,那麼讓currentSum += sum[i];
(3)別忘了這個步驟:maxSum = Math.max(maxSum, currentSum);
附一下我的程式碼:
public int findMaxArray(int[] array){ if (array == null || array.length == 0) { return Integer.MIN_VALUE; } int maxSum = Integer.MIN_VALUE; int currentSum = 0; for (int i = 0; i < array.length; i++) { if (currentSum < 0) { currentSum = array[i]; }else { currentSum += array[i]; } maxSum = Math.max(maxSum, currentSum); } return maxSum; }