2021.05.06根据身高重建队列
(题目来源:leetcode)
题目描述
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。
请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。
代码
public int[][] reconstructQueue(int[][] people) {
//按照x[0]降序,按照x[1]升序
//按照身高降序,按照人数升序
Arrays.sort(people, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2) {
return o1[0]==o2[0] ? o1[1]-o2[1] : o2[0]-o1[0];
}
});
//1.排序后整体是按照“高的在前,矮的在后”排序。
//2.身高高的先进行调整。
//3.身高相同的按照x[1]降序进行插入。
//4.每次都按照:当身高高的一批已经调整完成,再调整矮的一批时,
// 矮的一批无论如何调整都不会影响之前一批的正确性,只需要按照x[1]进行插入即可。
// 即,如果x[1]为2,那么将其插入第二个位置即可。(前面的两个人p[0],p[1]要么比他高,要么一样高)
List<int[]> list = new ArrayList<>();
for(int[] x : people) {
list.add(x[1],x);
}
return list.toArray(new int[list.size()][]);
}