思路:
贪心算法:
- 将数组中的每一个子数组按照,第二项的大小进行排列(不按第一项排列是因为,第一项可能比前一项的第二项小,而且为了使得数对链尽量长,第二项应该尽量从小到大选)
- 用临时数组存储首个子数组,并从首个子数组开始遍历,直到找到第一个比临时数组大的数组,改变临时数组的值为较大的子数组
- 由于排序的原因,上一个临时数组一定是遍历过程中,第二项最小的
class Solution {
public int findLongestChain(int[][] pairs) {
// 1,2
List<int[]> list=new LinkedList<>();
for(int[] arr:pairs){
list.add(arr);
}
list.sort((t1,t2)->{
return t1[1]-t2[1];
});
int num=0;
int[] temp=new int[]{Integer.MIN_VALUE,Integer.MIN_VALUE};
for(int[] arr:list){
if(arr[0]>temp[1]) {
num++;
}else{
continue;
}
temp=arr;
}
return num;
}
}