码迷,mamicode.com
首页 > 其他好文 > 详细

406. Queue Reconstruction by Height

时间:2018-10-20 16:28:54      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:++   排序   维数   就是   length   get   return   ==   array   

这题本质上是贪心法, 一个原则 “只有比你身高高的或者相等的才对你有影响,插入任何比你小的人都对你没影响” 因此从大到小排列,先处理大的,再处理小的。每次处理时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

标签:++   排序   维数   就是   length   get   return   ==   array   

原文地址:https://www.cnblogs.com/keepAC/p/9821609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!