Problem:
You are given n pairs of numbers. In every pair, the first number is always smaller than the second number.
Now, we define a pair (c, d) can follow another pair (a, b) if and only if b < c. Chain of pairs can be formed in this fashion.
Given a set of pairs, find the length longest chain which can be formed. You needn't use up all the given pairs. You can select pairs in any order.
Example 1:
Input: [[1,2], [2,3], [3,4]]
Output: 2
Explanation: The longest chain is [1,2] -> [3,4]
Note:
- The number of given pairs will be in the range [1, 1000].
思路:
Solution (C++):
int findLongestChain(vector<vector<int>>& pairs) {
if (pairs.empty() || pairs[0].empty()) return 0;
sort(pairs.begin(), pairs.end(), cmp);
int count = 1;
vector<int> tmp = pairs[0];
for (int i = 1; i < pairs.size(); ++i) {
if (pairs[i][0] > tmp[1]) {
tmp = pairs[i];
++count;
}
}
return count;
}
static bool cmp(vector<int>& a, vector<int>& b) {
return a[1] < b[1];
}
性能:
Runtime: 80 ms Memory Usage: 15.1 MB
思路:
Solution (C++):
性能:
Runtime: ms Memory Usage: MB