1. 程式人生 > 實用技巧 >劍指30.連續子陣列的最大和

劍指30.連續子陣列的最大和

題目描述

輸入一個整型陣列,數組裡有正數也有負數。陣列中一個或連續的多個整/陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為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; } }