力扣406 根据身高重建队列 Java版本

文章目录


题目描述

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

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

示例 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 <= 106

0 <= ki < people.length

题目数据确保队列可以被重建

代码

java 复制代码
class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(a,b)->{
            //如果身高相同就按照k来升序排列
            if (a[0]==b[0]){
                return a[1]-b[1];
            }
            //优先按照身高降序排列,到时候按照k来将各个人插入到队伍中的时候身高高的被挤到后面也不影响被挤走的这个人的k
            //例如:本来是[7,0][7,1],这个时候要插入一个[6,1]就会变成[7,0][6,1][7,1],队列中的[7,1]还是满足条件的,因为前面只有一个[7,0]是和他身高相同,所以这个[7,1]的k还是1
            return b[0]-a[0];
        });

        LinkedList<int[]> que = new LinkedList<>();
        //依次放到对应位置上,位置上已经有人了,原有的人就会被挤到后面
        for (int[] p:people){
            que.add(p[1],p);
        }
        return que.toArray(new int[people.length][]);
    }
}
相关推荐
至乐活着9 小时前
深入解析跳表SkipList:原理、实现与性能优化实战
数据结构·算法·跳表·skiplist·java实现
Jerry10 小时前
LeetCode 383. 赎金信
算法
ai产品老杨10 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
Jerry10 小时前
LeetCode 454. 四数相加 II
算法
可编程芯片开发11 小时前
基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真
算法
Jerry11 小时前
LeetCode 202. 快乐数
算法
hans汉斯12 小时前
基于改进交叉熵损失函数与Transformer的心电信号高风险分类研究
功能测试·深度学习·算法·yolo·目标检测·分类·transformer
Jerry12 小时前
LeetCode 349. 两个数组的交集
算法
YuK.W13 小时前
Leetcode100: 70.爬楼梯、118.杨辉三角、198.打家劫舍
java·算法·leetcode
随意起个昵称13 小时前
状压dp-基础题目2([USACO12MAR] Cows in a Skyscraper G)
c++·算法·动态规划