思想:
step1:先对people进行一个预排序:
先按身高进行降序排序,身高相同的则按k升序排序
为什么这么排序呢?
是因为先按身高进行降序排序可以保证后面再按k进行调整时可以保证将后面的人给调整到前面某个位置时时,不会影响之前人的k的顺序(大小),因为后面的都是比前面身高要矮的,而K表示的是比其身高高的人的个数,所以将后面一个矮的人插入到队列中不会影响(改变)前面人的k的值
step2:按k从左往右依次调整:
如果people[i]不在people[i][1]个索引处则把people[i]给插入到people[i][1]索引处
这里直接将people[i]给插入到people[i][1]索引处,巧用List来实现
class Solution {
public int[][] reconstructQueue(int[][] people) {
if(people.length<=1) return people;
//按身高降序排序,身高相同则按k降序排序
Arrays.sort(people,new Comparator<int[]>(){
@Override
public int compare(int[]obj1,int[]obj2){
return obj1[0]==obj2[0]?obj1[1]-obj2[1]:obj2[0]-obj1[0];
}}
);
//按k进行调整,如果people[i]不在people[i][1]个索引处则把people[i]给插入到people[i][1]索引处
List<int[]> list = new ArrayList<>();
for(int i=0;i<people.length;i++){
list.add(people[i][1],people[i]);
}
return list.toArray(new int[people.length][2]);
}
}