You are given n pairs of numbers. In every pair, thefirstnumberis always smaller than thesecondnumber.
Now, we define a pair (c, d) can follow another pair (a, b) ifand only if b < c. Chain of pairs can be formed in this fashion.
Given a setof pairs, find thelength longest chain which can be formed. You needn't use up all thegiven 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 numberofgiven pairs will be inthe range [1, 1000].
这道题目不用dp,采用排序即可完成。
class Solution {
public:
int findLongestChain(vector<vector<int>>& pairs) {
sort(pairs.begin(), pairs.end(), cmp);
int cnt = 0;
vector<int>& pair = pairs[0];
for (int i = 0; i < pairs.size(); i++) {
if (i == 0 || pairs[i][0] > pair[1]) {
pair = pairs[i];
cnt++;
}
}
return cnt;
}
private:
staticbool cmp(vector<int>& a, vector<int>&b) {
return a[1] < b[1] || a[1] == b[1] && a[0] < b[0];
}/*按照a[0]的大小来排序*/
};