Leetcode 406.根据身高重建队列

根据身高重建队列

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

注意:
总人数少于1100人。

示例

输入:

[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

 

输出:

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

 

首先找到身高最高的人并对他们进行排序。

然后找到身高次高的人,按照他们的前面的人数把他们插入到最高的人群中。

因此这是一个排序和插入的过程,按照身高进行降序排序,然后把身高相同的人按照k进行升序排序。每次取出身高相同的一组人,按照k值把他们插入到队列中。

 

 1 import java.util.Arrays;
 2 import java.util.Comparator;
 3 import java.util.LinkedList;
 4 import java.util.List;
 5 
 6 public class Solution {
 7     public static int[][] reconstructQueue(int[][] people) {
 8         Arrays.sort(people, new Comparator<int[]>(){
 9             public int compare(int[] a, int[] b) {
10                 if(a[0] != b[0]) return -a[0]+b[0];
11                 else return a[1]-b[1];
12             }
13         });
14         List<int[]> res = new LinkedList<>();
15         for(int[] p : people) {
16             res.add(p[1], p);
17         }
18         return res.toArray(new int[people.length][]);
19     }
20 
21     public static void main(String[] args){
22         int[][] people={{7,0},{4,4},{7,1},{5,0},{6,1},{5,2}};
23         reconstructQueue(people);
24     }
25 }

猜你喜欢

转载自www.cnblogs.com/kexinxin/p/10241832.html