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 }
  • 相关阅读:
    转载-如何高效的学习技术
    Lc176-第二高的薪水
    Lc4-寻找两个有序数组的中位数
    Lc175-组合两个表
    Lc3-无重复字符的最长子串
    Lc2-俩数相加
    Lc1- 两数之和
    jpa-子查詢
    20191225页面样式
    leetcode二刷结束
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10241832.html
Copyright © 2011-2022 走看看