Leetcode - 646 Maximum Length of Pair Chain (Medium)
题目描述:对于 (a, b) 和 (c, d) ,如果 b < c,则它们可以构成一条链,求最大链的长度。
解法一:DP
public int findLongestChain(int[][] pairs) {
int n = pairs.length;
Arrays.sort(pairs, (a, b) -> (a[0] - b[0]));
int[] dp = new int[n];
Arrays.fill(dp, 1);
for(int i = 1; i < n; i++){
for(int j = 0; j < i; j++){
if(pairs[i][0] > pairs[j][1]){
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
return dp[n - 1];
}
解法二:贪心
public int findLongestChain(int[][] pairs) {
if(pairs.length == 0) return 0;
Arrays.sort(pairs, (a,b)->a[1]-b[1]);
int pre = pairs[0][1];
int count = 1;
for(int i = 1;i<pairs.length;i++){
if(pairs[i][0] > pre){
count++;
pre = pairs[i][1];
}
}
return count;
}