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 }