牛客題霸--連續子陣列的最大和

mjt233發表於2020-11-26

連續子陣列的最大和

題目連結

Solution

最大子段和問題,可以使用動態規劃解決此問題。
d p [ i ] dp[i] dp[i]表示以i結束的子段的最大子段和。
所以到i時有兩種選擇,和前面的最大子段結合,自己構成一個新的子段。
得到轉移方程 d p i = m a x { d p i − 1 + a r r a y i , a r r a y i } dp_i = max\{dp_{i - 1} + array_i, array_i\} dpi=max{dpi1+arrayi,arrayi}

Code

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        int n = array.size();
        int dp[n + 5];
        dp[0] = array[0];
        for (int i = 1; i < n; ++i) {
            dp[i] = max(array[i], dp[i - 1] + array[i]);
        } 
        int ans = -1e9;
        for (int i = 0; i < n; ++i) ans = max(ans, dp[i]);
        return ans;
    }
};

相關文章