力扣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][]);
    }
}
相关推荐
longlongzihan8 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
封印师请假去地球钓鱼9 小时前
边解边变的问题:从“决策依赖“一词出发
人工智能·算法
今晚打老虎9 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
不会就选b10 小时前
算法日常・每日刷题--<贪心>26
数据结构·算法
hetao173383712 小时前
2026-09-29 hetao1733837 的刷题记录
c++·算法
欣欣之王来了13 小时前
AI合规专项:AI算法透明度的合规要求
人工智能·算法
wzdark13 小时前
分块思想在算法优化中的实践与应用4
算法
Because_of_Her113 小时前
dfs-洪水填充技巧
笔记·算法·深度优先·洪水填充
小静AI工程实验室13 小时前
RSA 算法详解:从模幂原理到 OAEP 加密、PSS 签名与 Python 实验
python·算法
xzal1213 小时前
GESP Python笔记
笔记·python·算法