1. 程式人生 > >找出一個數組中子陣列和的最大值

找出一個數組中子陣列和的最大值

讓我們看這樣一個數組:[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;
	}