劍指 Offer 42 連續(xù)子數組的最大和

劍指 Offer 42. 連續(xù)子數組的最大和

題意:輸入一個整型數組,數組中的一個或連續(xù)多個整數組成一個子數組。求所有子數組的和的最大值。
要求時間復雜度為O(n)。

解題思路

解法:
最簡單的解法肯定是雙層for循環(huán),遞歸去找最大的子數組和,但是我們也知道,這個必定會超時的。仔細推導題目,發(fā)現這個好像是一個DP問題,是否可以找到狀態(tài)轉移方程呢?
1.我們定義,F(n)為以nums[n]數字結尾的子數組的,最大和,不難推導出F(n)與F(n-1)關系

當F(n-1)<=0時,F(n)=nums[n]
當F(n-1)> 0時,F(n)=nums[n] + F(n-1)
2.,F(n) = max(F(n-1)+nums[n],nums[n])

解題遇到的問題

后續(xù)需要總結學習的知識點

##解法1
class Solution {
    public int maxSubArray(int[] nums) {
        // DP,F(n) = max(F(n-1)+nums[n],nums[n])
        // 我們定義,F(n)為以nums[n]數字結尾的子數組的,最大和,不難推導出F(n)與F(n-1)關系
        int pre = 0, max = nums[0];
        for (int i = 0; i < nums.length; i++) {
            pre = Math.max(pre + nums[i], nums[i]);
            max = Math.max(max, pre);
        }
        return max;
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容