1. 程式人生 > >Leetcode 406.根據身高重建隊列

Leetcode 406.根據身高重建隊列

插入 family 大於 str 等於 tor 註意 宋體 tro

根據身高重建隊列

假設有打亂順序的一群人站成一個隊列。 每個人由一個整數對(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 }

Leetcode 406.根據身高重建隊列