646. 最长数对链
给出 n 个数对。 在每一个数对中,第一个数字总是比第二个数字小。
现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。
给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。
示例 :
输入: [[1,2], [2,3], [3,4]]
输出: 2
解释: 最长的数对链是 [1,2] -> [3,4]
贪心
首先按照数对的第二个数从小到大排序,然后从最小的开始数,这种数法是最多的。
static const int _ = []
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();
class Solution {
public:
/*
struct cmp{
bool operator()(vector<int> v1,vector<int> v2)
{
if(v1[1] == v2[1])
return v1[0]<v2[0];
return v1[1]<v2[1];
}
};
*/
int findLongestChain(vector<vector<int>>& pairs) {
if(pairs.size()<=1) return pairs.size();
int count = 1;
//sort(pairs.begin(),pairs.end(),cmp());
sort(pairs.begin(), pairs.end(), [](const auto& p1, const auto& p2){
return p1[1] < p2[1] || (p1[1] == p2[1] && p1[0] < p2[0]);
});
int k = pairs[0][1];
for(int i=1;i<pairs.size();i++)
{
if(k<pairs[i][0])
{
count++;
k = pairs[i][1];
}
else
{
continue;
}
}
return count;
}
};