0
点赞
收藏
分享

微信扫一扫

646. 最长数对链(LIS&贪心)


646. 最长数对链(LIS&贪心)

首先pair排序。显然对于 只能选取。若 则不满足

然后我们定义小于关系:的第二关键字小于的第一关键字。

因此转换为最长递增子序列,直接dp即可。

时间复杂度:

class Solution {
public:
int findLongestChain(vector<vector<int>>& pairs) {
sort(pairs.begin(), pairs.end());
vector<int> arr;
for (auto p : pairs) {
int x = p[0], y = p[1];
if (arr.size() == 0 || x > arr.back()) {
arr.emplace_back(y);
} else {
int idx = lower_bound(arr.begin(), arr.end(), x) - arr.begin();
arr[idx] = min(arr[idx], y);
}
}
return arr.size();
}
};

贪心的思路:第一个肯定选取 最小的,然后再剩下继续选满足条件的最小的。因此按照

class Solution {
public:
int findLongestChain(vector<vector<int>>& pairs) {
int curr = INT_MIN, res = 0;
sort(pairs.begin(), pairs.end(), [](const vector<int> &a, const vector<int> &b) {
return a[1] < b[1];
});
for (auto &p : pairs) {
if (curr < p[0]) {
curr = p[1];
res++;
}
}
return res;
}
};


举报

相关推荐

0 条评论