【leetcode每日一题】2022/9/3 题目646. 最长数对链
题目描述:
最简单的思路:贪心
将每组数对按第二个数从小到大排序,每次尽量选满足题意的第二个数最小的数对,这是一种贪心的思想。
给出代码:
class Solution {
public int findLongestChain(int[][] pairs) {
if(pairs.length == 0)
return 0;
int item = 0;
for (int i = 0; i < pairs.length; i++) {
for (int j = i+1; j < pairs.length; j++) {
if(pairs[i][1] > pairs[j][1]){
item = pairs[i][1];
pairs[i][1] = pairs[j][1];
pairs[j][1] = item;
item = pairs[i][0];
pairs[i][0] = pairs[j][0];
pairs[j][0] = item;
}
}
}
int nums = 1;
int num1 = pairs[0][0];
int num2 = pairs[0][1];
for (int i = 1; i < pairs.length; i++) {
if(pairs[i][0] > num2){
nums++;
num1 = pairs[i][0];
num2 = pairs[i][1];
}
}
return nums;
}
}
排序用了最简单的O(n2),可以用其他排序方法优化。
查看题解后发现了Java里的一个快排函数使用方法,记录到下边:
Arrays.sort(pairs, (a, b) -> a[1] - b[1]);