406. Queue Reconstruction by Height

Posted keepac

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了406. Queue Reconstruction by Height相关的知识,希望对你有一定的参考价值。

这题本质上是贪心法, 一个原则 “只有比你身高高的或者相等的才对你有影响,插入任何比你小的人都对你没影响” 因此从大到小排列,先处理大的,再处理小的。每次处理时K 就是插入的位置,因为前面人的身高都比你高或者一样,所以你的K 是多少就决定了你的下标。

people: 
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 
排序后: 
[[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]] 

 

1. [7.0] 然后 处理[7,1]时只用看 K=1, 那 必然在1的位置, 变成了[7,0], [7,1],

2. [6 1] 因为K=1, 必然 也在下标为1 的位置。 [7,0], [6 1]  [7,1],

3. [5 0] 变成 [5 0] [7 0] [6 1] [7 1]

4. [5 2] 变成 [5 0] [7 0] [5 2]  [6 1] [7 1]

5.[4 4] 因为K=4 ,只要数4个位置 变成   [5 0] [7 0] [5 2]  [6 1] [4 4] [7 1]

 

 1 class Solution {
 2 public int[][] reconstructQueue(int[][] people) {
 3 //int[][] 可以看成特殊的一维数组,所以用Arrays.sort()
 4 Arrays.sort(people, (o1,o2)->(o1[0]==o2[0]? o1[1]- o2[1]: o2[0]-o1[0]));
 5 
 6 List<int[]> list = new LinkedList<>(); 
 7 for(int[] pl: people){ //    1. 注意List 这种 add(int index, E element), 可以直接add 到index
 8 list.add(pl[1], pl);  //2. 只需要把pl 的reference 放入List即可,不需要new 一个对象
 9 }
10 
11 int[][] result = new int[people.length][];// 3.new 一个二位数组时,不用指定第二维的长度
12 for(int i=0; i<people.length; i++){
13 result[i] = list.get(i);  // 4.直接copy reference 返回即可 
14 }
15 return result;
16 }
17 }

 




以上是关于406. Queue Reconstruction by Height的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode-406-Queue Reconstruction by Height]

LeetCode 406: Queue Reconstruction

[LeetCode] 406. Queue Reconstruction by Height(按身高重排队列)

[leetcode] 406.Queue Reconstruction by Height

LeetCode 406.Queue Reconstruction by Height

刷题406. Queue Reconstruction by Height