题目大意:对与对之间想要形成一个链就需要满足对1的第二个数小于对2的第一个数,问最长能形成多长的链
分析:动规。LIS的应用。动规之前需要根据数组的第一个数先进行从小到大排序。
代码:
class Solution {
public:
static bool cmp(const vector<int>& a,const vector<int>& b){
return a[0] < b[0];
}
int findLongestChain(vector<vector<int>>& pairs) {
int ans = 1;
vector<int> dp(pairs.size(),1);
sort(pairs.begin(),pairs.end(),cmp);
for(int i = 1;i < pairs.size();i++){
for(int j = 0;j < i;j++){
if(pairs[j][1] < pairs[i][0])
dp[i] = max(dp[i],dp[j] + 1);
}
ans = max(ans,dp[i]);
}
return ans;
}
};