1. 程式人生 > >LeetCode 646. Maximum Length of Pair Chain [Medium]

LeetCode 646. Maximum Length of Pair Chain [Medium]

原題地址

題目內容

這裡寫圖片描述

題目分析

題目的意思為找出能相連的最長串的長度,(a,b),(c,d),因為b < c,所以他們是能相連的。採用動態規劃的方法,首先對原來的pair陣列進行排序。用dp[n]記錄每個pair能形成鏈的最大長度。設一個變數temp,如果【pairs[j][1]】小於【pairs[i][0]】,代表pairs(i)能連多一個pair,那麼temp=dp[j]+1,否則temp=dp[j],再將temp與dp[i]相比較,看新的子串是否長於原來的鏈的長度。最後返回dp裡面值最大的值。

程式碼實現

class Solution {
public
: int findLongestChain(vector<vector<int>>& pairs) { sort(pairs.begin(),pairs.end(),cmp); int dp[pairs.size()] = {1}; for(int i = 0; i < pairs.size(); i++){ for(int j = 0; j < i; j++){ dp[i] = max(dp[i], pairs[j][1] < pairs[i][0
] ? dp[j]+1:dp[j]); } } int max = 0; for(int i = 0; i < pairs.size(); i++){ if(max < dp[i]){ max = dp[i]; } } return max; } private: static bool cmp(vector<int>& a, vector<int>& b){ return
a[0] < b[0]; } };