LeetCode406:根据身高重建队列

Posted zhang-yi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode406:根据身高重建队列相关的知识,希望对你有一定的参考价值。

题目描述:

技术图片

 

题目意思是,给定一个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:根据身高重建队列的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode406:根据身高重建队列

[LeetCode-Golang] 406. 根据身高重建队列

leetcode中等406根据身高重建队列

leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)

题目地址(406. 根据身高重建队列)

406 Queue Reconstruction by Height 根据身高重建队列