【面試題】連續子數組的最大和

題目

有一個整型數組,裏面的元素有正數和負數,一個或者連續的多個元素組成一個子數組,求所有子數組的和的最大值。也就是連續子數組最大和問題。

分析

這道題一般使用動態規劃來做,面試的時候問到也是考察動態規劃。f(i)表示以i結尾的子數組的最大和。既然是以i結尾,那從何處開始呢?j在i的左邊,如果A[0]到A[j]的和爲負,那f(i)應該從j+1開始。那f(i)的遞推公式怎麼算呢?
f(i) = f(i-1) + A[i];條件是f(i-1) > 0
f(i) = A[i];條件是f(i-1) <= 0
要求的結果ans就等於所有f(i)的最大值了。

代碼

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        int len = array.size();
        if(len == 0)
            return 0;
        int k_sum = array.at(0);
        int max_sum = array.at(0);
        for(int i = 1; i < len; i++){
            if(k_sum < 0)
                k_sum = array.at(i);
            else
                k_sum += array.at(i);
            max_sum = max(k_sum, max_sum);
        }
        return max_sum;
    }
};
發佈了100 篇原創文章 · 獲贊 21 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章