LeetCode 646. Maximum Length of Pair Chain [Medium]
阿新 • • 發佈:2018-12-11
原題地址
題目內容
題目分析
題目的意思為找出能相連的最長串的長度,(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];
}
};