leetcode做題筆記整理


題目都是來自leetcode,答主使用c++語言完成,其實包括樓主自己的感想,以及會參考多種版本,分析其中的不同

最主要的目的還是樓主自己溫故知識,如果能對讀者有所作用的話那更是很開心的事情。

博主是語言的初學者已經算法的初學者,希望能互相學習

53. 最大子序和

題目描述:給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。

    int maxSubArray(vector<int>& nums) {
         vector<int>dp(nums.size());
         dp[0]=nums[0];
         int max_num=dp[0];
         for(int i=1;i<nums.size();i++){
             if(dp[i-1]<0)
                 dp[i]=nums[i];
             else
                 dp[i]=nums[i]+dp[i-1];
             max_num=max(max_num,dp[i]);
         }
         return max_num;
    }
};

這道題算是博主第一次使用dp算法和領會到dp思想的一道題,其中的狀態轉移方程為

dp[i]=nums[i]+dp[i-1]<0?0:dp[i-1]

值得注意的是要清楚這里的狀態值得是對於每一個位置所能得到的最大的序列和,所以這里的結果應該是所有的dp[i】(i=0,1...n-1)的最大值就是為本題的最終結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM