LeetCode 406. 根据身高重建队列

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

示例 1:

输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
解释:
编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。
编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。
编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。
编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。
编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。

示例 2:

输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]

提示:

  • 1 <= people.length <= 2000
  • 0 <= hi <= 10^6
  • 0 <= ki < people.length
  • 题目数据确保队列可以被重建

思路:

本题采用贪心的思路解决。先对 people 数组进行排序,将身高高的排在前面,若身高相等,则 k 小的排在前面。然后依次将这个有序数组里面的元素插入队列 que 里面。最后将 que 转化为数组即可。

代码:

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(o1,o2)->{
            //身高 h 高的排在前面
            if(o1[0]!=o2[0]) return o2[0]-o1[0];
            //身高相同则 k 小的排在前面
            return o1[1]-o2[1];
        });
        List<int[]> que = new LinkedList<>();
        for(int[] p:people){
            que.add(p[1],p); //在 (index,value)处插入元素
        }
        return que.toArray(new int[people.length][]);
    }
}

参考:代码随想录

相关推荐

  1. 【贪心】LeetCode-406. 根据身高重建队列

    2024-04-01 19:36:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 19:36:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 19:36:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 19:36:02       87 阅读
  4. Python语言-面向对象

    2024-04-01 19:36:02       96 阅读

热门阅读

  1. 元胞自动机(matlab)

    2024-04-01 19:36:02       34 阅读
  2. 天猫超级会员怎么升级

    2024-04-01 19:36:02       51 阅读
  3. 字符串优化&&单例模式(C++基础)

    2024-04-01 19:36:02       35 阅读
  4. 什么是缓存击穿、缓存穿透、缓存雪崩?

    2024-04-01 19:36:02       38 阅读
  5. 【pytest】pytest` 中几种常用的参数化方法

    2024-04-01 19:36:02       43 阅读
  6. 2024年3月29日西山居游戏运维开发面经

    2024-04-01 19:36:02       44 阅读
  7. tcpdump 抓包

    2024-04-01 19:36:02       41 阅读
  8. 每日一题 2580统计将重叠区间合并成组的方案数

    2024-04-01 19:36:02       38 阅读
  9. 力扣top100-两数之和

    2024-04-01 19:36:02       41 阅读
  10. Web 应用基础 - ServletContext:获取与应用

    2024-04-01 19:36:02       43 阅读
  11. 砍树c++

    砍树c++

    2024-04-01 19:36:02      35 阅读