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

題目描述

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

示例1:

輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6。

提示:
1 <= arr.length <= 10^5
-100 <= arr[i] <= 100

解題思路

  • 動態(tài)規(guī)劃
    記dp[i]為以數(shù)組第i個數(shù)結(jié)尾的最大子數(shù)組和,那么有:
    dp[i]=max(dp[i-1],0)+nums[i]
    找到最大的dp[i],即為所求的連續(xù)子數(shù)組的最大和。
  • 優(yōu)化
    dp[i]只與前一項優(yōu)化,因此只需一個變量存儲值即可,不需額外的數(shù)組空間存儲。

源碼

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n=nums.size();
        int ans=nums[0];
        /*
        vector<int> dp(n);
        dp[0]=nums[0];
        for(int i=1;i<n;i++)
        {
            dp[i]=max(dp[i-1]+nums[i],nums[i]);
            ans=max(dp[i],ans);
        }
        return ans;
        */
        int pre=nums[0];
        for(int i=1;i<n;i++)
        {
            pre=max(pre,0)+nums[i];
            ans=max(ans,pre);
        }
        return ans;
    }
};

題目來源

來源:力扣(LeetCode)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容