zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    POJ 3468 A Simple Problem with Integers
    BZOJ 4430 Guessing Camels
    POJ 2309 BST
    POJ 1990 MooFest
    cf 822B Crossword solving
    cf B. Black Square
    cf 828 A. Restaurant Tables
    Codefroces 822C Hacker, pack your bags!
    [HDU 2255] 奔小康赚大钱
    [BZOJ 1735] Muddy Fields
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10241832.html
Copyright © 2011-2022 走看看