leetcode 53 最大子序列之和(動態規劃)
阿新 • • 發佈:2019-04-04
array num pan arr turn leet lse 最大 clas
思路:nums為給定的數組,動態規劃:
設 一維數組:dp[i] 表示 以第i個元素為結尾的一段最大子序和。
1)若dp[i-1]小於0,則dp[i]加上前面的任意長度的序列和都會小於nums[i],則 dp[i] = nums[i];
2) 若dp[i-1] 不小於0, 則 dp[i] = dp[i-1] + nums[i];
邊界條件:dp[0] = nums[0] (nums數組的第一個元素的最大長度就是本身)
class Solution { public: int maxSubArray(vector<int>& nums) {int len = nums.size(); if(len == 0) return 0; if(len == 1) return nums[0]; vector<int> dp(len, 0); //dp[i]: 以第i個元素為結尾的最大子序列和 dp[0] = nums[0]; int max_num = dp[0]; for(int i=1; i<len; i++){ if(dp[i-1] > 0) dp[i] = dp[i-1] +nums[i]; else dp[i] = nums[i]; max_num = max(max_num, dp[i]); } return max_num; } };
leetcode 53 最大子序列之和(動態規劃)