zoukankan      html  css  js  c++  java
  • LeetCode 406 根据身高重建队列

    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)升序排列

    执行用时:10 ms, 在所有 Java 提交中击败了55.43%的用户
    内存消耗:39.4 MB, 在所有 Java 提交中击败了84.61%的用户

    class Solution {
        public int[][] reconstructQueue(int[][] people) {
            if(people==null || people.length==0 || people[0].length==0) {
                return new int[0][0];
            }
    
            //首先排序, O(NlogN)
            Arrays.sort(people, new Comparator<int[]>(){
                public int compare(int[] o1, int[] o2) {
                    if(o1[0]!=o2[0]) {
                        return o2[0] - o1[0];  //身高高的在前
                    }
                    else {
                        return o1[1] - o2[1];  //k小的在前
                    }
                }
            });
            //System.out.println(Arrays.deepToString(people));
    
            //调整位置, O(N)
            List<int[]> ansList = new LinkedList<>();
            for(int[] tmp: people) {
                ansList.add(tmp[1], tmp);
            }
    
            return ansList.toArray(new int[0][0]);
        }
    }
    
  • 相关阅读:
    口语详解|为什么“how to say”是错的?
    9 tips to improve spoken english
    splash 安装
    ubuntu 安装NVIDIA驱动过程
    【Python数据分析】时间模块datetime
    【Python数据分析】Pandas模块下的Series与DataFrame
    【Python】文件
    博客园Markdown样式美化
    【Python】异常处理
    【Python】eval函数
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13983507.html
Copyright © 2011-2022 走看看