1. 程式人生 > >leetcode 53 最大子序列之和(動態規劃)

leetcode 53 最大子序列之和(動態規劃)

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 最大子序列之和(動態規劃)