LeetCode——5805. 最小未被占据椅子的编号(The Number of the Smallest Unoccupied Chair)[中等]——分析及代码(Java)
LeetCode——5805. 最小未被占据椅子的编号[The Number of the Smallest Unoccupied Chair][中等]——分析及代码[Java]
- 一、题目
- 二、分析及代码
- 1. 堆(优先队列)
- (1)思路
- (2)代码
- (3)结果
- 三、其他
一、题目
有 n 个朋友在举办一个派对,这些朋友从 0 到 n - 1 编号。派对里有 无数 张椅子,编号为 0 到 infinity 。当一个朋友到达派对时,他会占据 编号最小 且未被占据的椅子。
- 比方说,当一个朋友到达时,如果椅子 0 ,1 和 5 被占据了,那么他会占据 2 号椅子。
当一个朋友离开派对时,他的椅子会立刻变成未占据状态。如果同一时刻有另一个朋友到达,可以立即占据这张椅子。
给你一个下标从 0 开始的二维整数数组 times ,其中 times[i] = [arrivali, leavingi] 表示第 i 个朋友到达和离开的时刻,同时给你一个整数 targetFriend 。所有到达时间 互不相同 。
请你返回编号为 targetFriend 的朋友占据的 椅子编号 。
示例 1:
输入:times = [[1,4],[2,3],[4,6]], targetFriend = 1
输出:1
解释:
- 朋友 0 时刻 1 到达,占据椅子 0 。
- 朋友 1 时刻 2 到达,占据椅子 1 。
- 朋友 1 时刻 3 离开,椅子 1 变成未占据。
- 朋友 0 时刻 4 离开,椅子 0 变成未占据。
- 朋友 2 时刻 4 到达,占据椅子 0 。
朋友 1 占据椅子 1 ,所以返回 1 。
示例 2:
输入:times = [[3,10],[1,5],[2,6]], targetFriend = 0
输出:2
解释:
- 朋友 1 时刻 1 到达,占据椅子 0 。
- 朋友 2 时刻 2 到达,占据椅子 1 。
- 朋友 0 时刻 3 到达,占据椅子 2 。
- 朋友 1 时刻 5 离开,椅子 0 变成未占据。
- 朋友 2 时刻 6 离开,椅子 1 变成未占据。
- 朋友 0 时刻 10 离开,椅子 2 变成未占据。
朋友 0 占据椅子 2 ,所以返回 2 。
提示:
- n == times.length
- 2 <= n <= 10^4
- times[i].length == 2
- 1 <= arrivali < leavingi <= 10^5
- 0 <= targetFriend <= n - 1
- 每个 arrivali 时刻 互不相同 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/the-number-of-the-smallest-unoccupied-chair
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、分析及代码
1. 堆(优先队列)
(1)思路
设计 3 个小顶堆,分别存放到达、离开的时间及对应朋友的编号,和可使用的椅子编号,然后模拟朋友们的来访过程,直至目标朋友到达。
(2)代码
class Solution {public int smallestChair(int[][] times, int targetFriend) {int n = times.length, targetTime = times[targetFriend][0];//朋友数量,目标时间,即目标朋友到达的时间PriorityQueue<int[]> arrTime = new PriorityQueue<>((a1, a2) -> a1[0] - a2[0]);//小顶堆,按到达的顺序存放对应时间及朋友编号PriorityQueue<int[]> leaTime = new PriorityQueue<>((l1, l2) -> l1[0] - l2[0]);//小顶堆,按离开的顺序存放对应时间及朋友编号for (int i = 0; i < n; i++) {if (times[i][0] <= targetTime)//不晚于目标时间的到达时刻及对应编号入堆arrTime.offer(new int[]{times[i][0], i});if (times[i][1] <= targetTime)//不晚于目标时间的离开时刻及对应编号入堆leaTime.offer(new int[]{times[i][1], i});}PriorityQueue<Integer> chair = new PriorityQueue<Integer>();//小顶堆,存放可用椅子编号for (int i = 0; i < n; i++)//初始化,n个朋友最多使用n个椅子chair.offer(i);int[] usedChair = new int[n];//各位朋友使用的椅子编号int t = arrTime.peek()[0];//当前时刻while (t < targetTime) {//模拟usedChair[arrTime.poll()[1]] = chair.poll();//当前到达的朋友使用椅子t = arrTime.peek()[0];//时间跳转到下一朋友到达while (!leaTime.isEmpty() && leaTime.peek()[0] <= t)//之前的朋友归还椅子chair.offer(usedChair[leaTime.poll()[1]]);}return chair.poll();//目标朋友到达,输出当前的最小椅子}
}
(3)结果
执行用时 :51 ms,在所有 Java 提交中击败了 100.00% 的用户;
内存消耗 :46.4 MB,在所有 Java 提交中击败了 100.00% 的用户。
(目前提交用户量不足,暂无排名)
三、其他
暂无。
LeetCode——5805. 最小未被占据椅子的编号(The Number of the Smallest Unoccupied Chair)[中等]——分析及代码(Java)相关推荐
- LeetCode 1942. 最小未被占据椅子的编号(set)
文章目录 1. 题目 2. 解题 1. 题目 有 n 个朋友在举办一个派对,这些朋友从 0 到 n - 1 编号. 派对里有 无数 张椅子,编号为 0 到 infinity . 当一个朋友到达派对时, ...
- LeetCode——787. K 站中转内最便宜的航班(Cheapest Flights Within K Stops)[中等]——分析及代码(Java)
LeetCode--787. K 站中转内最便宜的航班[Cheapest Flights Within K Stops][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 ( ...
- LeetCode——1834. 单线程 CPU(Single-Threaded CPU)[中等]——分析及代码(Java)
LeetCode--1834. 单线程 CPU[Single-Threaded CPU][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 优先队列 (1)思路 (2)代码 (3)结果 ...
- LeetCode——1824. 最少侧跳次数(Minimum Sideway Jumps)[中等]——分析及代码(Java)
LeetCode--1824. 最少侧跳次数[Minimum Sideway Jumps][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划(二维数组) (1)思路 (2)代 ...
- LeetCode——1888. 使二进制字符串字符交替的最少反转次数(Minimum Number of Flips to Make the Binary ...)[中等]——分析及代码(Java)
LeetCode--1888. 使二进制字符串字符交替的最少反转次数[Minimum Number of Flips to Make the Binary String Alternating][中等 ...
- LeetCode——1947. 最大兼容性评分和(Maximum Compatibility Score Sum)[中等]——分析及代码(Java)
LeetCode--1947. 最大兼容性评分和[Maximum Compatibility Score Sum][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 状态压缩 + 动态 ...
- LeetCode——1846. 减小和重新排列数组后的最大元素(Maximum Element After Decreasing and Rearranging)[中等]——分析及代码(Java)
LeetCode--1846. 减小和重新排列数组后的最大元素[Maximum Element After Decreasing and Rearranging][中等]--分析及代码[Java] 一 ...
- LeetCode——909. 蛇梯棋(Snakes and Ladders)[中等]——分析及代码(Java)
LeetCode--909. 蛇梯棋[Snakes and Ladders][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 广度优先搜索 (1)思路 (2)代码 (3)结果 三.其 ...
- LeetCode——802. 找到最终的安全状态(Find Eventual Safe States)[中等]——分析及代码(Java)
LeetCode--802. 找到最终的安全状态[Find Eventual Safe States][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 反图 + 拓扑排序 (1)思路 ...
- LeetCode——1736. 替换隐藏数字得到的最晚时间(Latest Time by Replacing Hidden Digits)——分析及代码(Java)
LeetCode--1736. 替换隐藏数字得到的最晚时间[Latest Time by Replacing Hidden Digits]--分析及代码[Java] 一.题目 二.分析及代码 1. 逐 ...
最新文章
- 对于继电器线圈奇怪的H-B曲线的实验测量
- c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc
- Caffe学习记录:Cifar-10 自定义网络训练记录
- JVM调优:GC标记清除回收算法
- mysql怎么消除冗余,mysql剔除冗余数据
- 计算几何 —— 二维几何基础 —— 三角形的面积
- mapreduce复制连接的代码_MapReduce:在大型集群上简化数据处理(2)
- pandas 替换 某列大于_Pandas使用总结
- PostgreSQL中的“use database_name”命令
- Linux 五种I/O模型
- 浙江省街道乡镇geo json地图数据全
- Qt+opencv二值化
- 获取秒级时间戳与毫秒级时间戳
- requests库手工识别验证码登录超星泛雅
- php 数字转人民币,php数字转人民币金额大写
- C# 操作Excel加水印
- ui设计入门书籍_书籍封面设计入门指南
- 重写equals方法一定要重写hashcode方法吗
- windows编程学习——1 关闭窗口不退出
- {转帖]图纸A0,A1,A2,A3,A4实际尺寸是多少?长和宽怎么分
热门文章
- 日语学习网站分类汇总
- spring注入sessionfactory
- Site App轻松创建移动开发
- java.lang.UnsupportedOperationException\r\n\tat java.sql.Date.toInstant(Date.java:304)
- 中国社会为何多犬儒?
- 暮雨小巷,殇了身影,冷了沙洲
- openwrt 19 overlay 空间不足_新桥胡同拆除19处违建!背街小巷“瘦身”后宽敞多了...
- 图片工厂设置背景颜色
- Qt编写地图综合应用12-路线查询
- 计算机连上wifi无法上网了,电脑已连接wifi但无法上网 已连接wifi但电脑无法上网-192路由网...