Description:
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:
1.The number of given pairs will be in the range [1, 1000].
问题描述:
你有n对数,每对数的第一个数总比第二个数要小。
现在定义,对于(c,d)和(a,b),当c > b时,(c,d)可以’follow’(a,b)。对链可以以这种方式形成。
现在给定一组对,找出最长的对链。注意可以以任意次序选择对
解法:
/*
令pair = (start, end)
首先将pairs按照end排序
然后在遍历pairs的过程中维护一个end,它为遍历过的pair中最大的end
*/
class Solution {
public int findLongestChain(int[][] pairs) {
Arrays.sort(pairs, new Comparator<int[]>() {
@Override
public int compare(int[] arg0, int[] arg1) {
return arg0[1] - arg1[1];
}});
int sum = 0, end = Integer.MIN_VALUE;
for(int i = 0;i < pairs.length;i++) {
int[] pair = pairs[i];
if(pair[0] > end) {
sum++;
end = pair[1];
}
}
return sum;
}
}