算法學習之連續子數組的最大和

題目:輸入一個整型數組,數組裏有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。要求時間複雜度爲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 max = Integer.MIN_VALUE;
        int sum = 0;
        for(int value:array){
            if(sum<=0){ // 不管首個數字還是累加值小於0時都重新賦值,因爲數組中肯定存在正整數,如果出現極端情況(只有一個正整數)我們指針必須指向這個唯一的正整數
                sum = value;
            }else{
                sum+=value;
            }
            if(max<sum){
                max = sum;
            }
        }
        return max;
    }
}

時間複雜度:O(n)

空間複雜度:O(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章