首页 > 其他 > 详细

LeetCode406:根据身高重建队列

时间:2020-05-10 22:41:14      阅读:64      评论:0      收藏:0      [点我收藏+]

题目描述:

技术分享图片

 

题目意思是,给定一个people二维数组,里面放的是1*2的一维数组,其第一个元素是身高,第二个元素是原始队列中该位置前面身高大于等于此身高的人数,题目要求将这个打乱了的队列恢复到之前的样子。

 

解题思路:

通过观察可以知道,应该先排个子高的人,他们的相对位置确定之后,比他们低的人进队将不会影响他们的相对位置;因此需要对people数组做如下排序:

1、相同身高的人,按照k升序排列;

2、不同身高的人,按照身高降序排列。

将上述排列后的people的元素按顺序插入到位置k上,也就是说,每次插入的时候,保证插入的元素前面比其高的人的个数为k,这样就能得到原始队列的顺序了。

 

具体代码如下:(参考了官方的代码)

 1 class Solution {
 2     public int[][] reconstructQueue(int[][] people) {
 3         Arrays.sort(people, new Comparator<int[]>(){ //重写compare方法
 4             @Override
 5             public int compare(int[] o1 , int[] o2){
 6                 return o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]; //相同身高的,按照k升序排,不同身高的按照身高降序排
 7             }
 8         });
 9 
10         List<int[]> result = new LinkedList<>();
11         for(int[] p : people){
12             result.add(p[1] , p);//始终保证队列前面有k个身高大于等于p[0]的人
13         }
14         int len = people.length;
15         return result.toArray(new int[len][2]);
16     }
17 }

 

LeetCode406:根据身高重建队列

原文:https://www.cnblogs.com/zhang-yi/p/12865539.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!