題目都是來自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)的最大值就是為本題的最終結果