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;
}
};