首页 > 其他分享 >【LeeCode】406. 根据身高重建队列

【LeeCode】406. 根据身高重建队列

时间:2023-02-18 17:01:37浏览次数:53  
标签:int people 队列 list System 406 LeeCode new

【题目描述】

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

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

 

​​​​https://leetcode.cn/problems/queue-reconstruction-by-height/description/?favorite=2cktkvj​


【示例】

【LeeCode】406. 根据身高重建队列_数组


【代码】​​从高到低考虑​

package com.company;
import java.lang.reflect.Array;
import java.util.*;

// 2022-02-18
class Solution {
public int[][] reconstructQueue(int[][] people) {
int len = people.length;
// 排序前:
for (int[] person : people) {
System.out.print(Arrays.toString(person));
}

// 按身高倒序, 身高相同则升序
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] != o2[0]){
// 如果第一位不同, 则按首位降序
return o2[0] - o1[0];
}else {
// 如果第一位相同, 则升序
return o1[1] - o2[1];
}
}
});
// 排序后:
System.out.println();
for (int[] person : people) {
System.out.print(Arrays.toString(person));
}

List<int[]> list = new ArrayList<>();
// 按下标p[i] 插入list
for (int[] p : people){
// 按下标p[1], 添加元素p
list.add(p[1], p);
}
System.out.println();
for (int[] x : list){
System.out.print(Arrays.toString(x));
}
return list.toArray(new int[list.size()][]);
}
}

public class Test {
public static void main(String[] args) {
new Solution().reconstructQueue(new int[][]{{7,0},{4,4},{7,1},{5,0},{6,1},{5,2}}); // 输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
// new Solution().reconstructQueue(new int[][]{{6,0},{5,0},{4,0},{3,2},{2,2},{1,4}}); // 输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]
}
}

【LeeCode】406. 根据身高重建队列_java_02


标签:int,people,队列,list,System,406,LeeCode,new
From: https://blog.51cto.com/u_13682316/6065460

相关文章

  • 【LeeCode】300. 最长递增子序列
    【题目描述】给你一个整数数组 ​​nums​​ ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如......
  • 【LeeCode】674. 最长连续递增序列
    【题目描述】给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 ​​l​​ 和 ​​r​​(​​l<r​​)确......
  • PHP与RabbitMQ消息队列简单示例
    ​​RabbitMQ​​提供跨语言接口,我们可以使用主流编程语言Java,C,C++,Python,PHP等和RabbitMQ做对接。RabbitMQ有消息确认机制、灵活的路由控制、以及消息集群高可用,使得很多大......
  • 【LeeCode】718. 最长重复子数组
    【题目描述】给两个整数数组 ​​nums1​​ 和 ​​nums2​​ 两个数组中 公共的 、长度最长的子数组的长度 。​​​https://leetcode.cn/problems/maximum-length-......
  • 消息队列非阻塞
    消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。作为早期unix通信机制之一的信号能够传送的信息量有限,后来虽然POSIX1003.1b在信号的实时性方面作了拓广,使......
  • 单调队列
    单调队列是什么呢?可以直接从问题开始来展开。Poj2823给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数。数列长度:N<=106,m<=N暴力解很直观的一种解法,那就......
  • 堆-- 神奇的优先队列
    堆是什么?是一种特殊的完全二叉树,就像树一样。有没有发现这棵二叉树有一个特点?就是所有的父节点都比子节点小(PS:就是圆圈的数值,圆圈外面的编号是这个节点的编号,)那么符合这样......
  • 【LeetCode栈与队列#06】前K个高频元素,以及pair、priority_queue的使用
    前K个高频元素力扣题目链接(opensnewwindow)给定一个非空的整数数组,返回其中出现频率前k高的元素。示例1:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]示......
  • 【数据结构】栈与队列的实际应用——球钟问题
    球钟:球钟为一种计时工具,其主要原理为通过小球的移动来进行实践的记录。它有三个能容纳若干球的指示器:小时指示器、五分钟指示器、分钟指示器。如果小时、五分钟、分钟指示......
  • 【数据结构】队列
    队列队列是限制在两端进行数据插入或删除的线性表,其特点为“先入先出,后入后出”。 允许进行入队的一端称为“队尾”,允许进行出兑的一端称为“队首”。顺序队相关代码:......