补一下前两天做题的笔记
身高重建队列思路:本题要按照题目中数组的含义来正确的排列队列,同样本题有两个维度,身高和前面有几个比自己高的人数,在面对两个维度的问题时候,需要分别进行处理,同时处理往往是非常困难的,那么我们就需要按照哪种顺序来处理两个维度,是先人数后身高还是先身高后人数?
先用先人数后身高的处理方式,不管是先按人数升序还是降序,在第二次处理身高维度的时候都没法完成正确排列。所以我们应该先处理身高再处理人数,因为人数表示的是前面有几个比自己高的人数,所以我们应当先对身高进行降序排列,把升高大的排在前面,这样在第二次处理人数的时候,我们只需要以人数为下标插入队列的相应位置即可,因为后面的身高一定小于前面的身高所以插入之后也不会违反题目的含义
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people,(a,b)->{
if (a[0] == b[0]){
return a[1] - b[1];
}else return b[0] - a[0];
});
LinkedList<int[]> res = new LinkedList<>();
for(int[] p : people){
res.add(p[1],p);
}
return res.toArray(new int[people.length][]);
}
}