劍指30.連續子陣列的最大和
阿新 • • 發佈:2020-08-18
題目描述
輸入一個整型陣列,數組裡有正數也有負數。陣列中一個或連續的多個整/陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為O(n)。 例如,輸入的陣列為{1,-2,3,10,-4,7,2,-5},和最大的子陣列為{3,10,-4,7,2},因此輸出為該子陣列的和18。思路
涉及的知識點是“動態規劃”。通常可以用遞迴的方式分析動態規劃問題,但最終都會基於迴圈進行編碼。 分析規律,從第一個數字開始累加,若走到某一個數字時,前面的累加和為負數,說明不能繼續累加了,要從當前數字重新開始累加。在累加過程中,將每次累加和的最大值記錄下來,遍歷完成後,返回該數字。 注意測試用例,要考慮到全為負數的情況!!程式碼實現
public class Solution { public int FindGreatestSumOfSubArray(int[] array) { if (array == null || array.length <=0) return 0; int maxSum = array[0]; int sum = array[0]; for (int i = 1; i < array.length; i++) { if (sum >= 0) sum+= array[i]; else sum = array[i]; // 更新累加過程中的最大值 if (sum > maxSum) maxSum = sum; } return maxSum; } }