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)相关推荐

  1. LeetCode 1942. 最小未被占据椅子的编号(set)

    文章目录 1. 题目 2. 解题 1. 题目 有 n 个朋友在举办一个派对,这些朋友从 0 到 n - 1 编号. 派对里有 无数 张椅子,编号为 0 到 infinity . 当一个朋友到达派对时, ...

  2. LeetCode——787. K 站中转内最便宜的航班(Cheapest Flights Within K Stops)[中等]——分析及代码(Java)

    LeetCode--787. K 站中转内最便宜的航班[Cheapest Flights Within K Stops][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 ( ...

  3. LeetCode——1834. 单线程 CPU(Single-Threaded CPU)[中等]——分析及代码(Java)

    LeetCode--1834. 单线程 CPU[Single-Threaded CPU][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 优先队列 (1)思路 (2)代码 (3)结果 ...

  4. LeetCode——1824. 最少侧跳次数(Minimum Sideway Jumps)[中等]——分析及代码(Java)

    LeetCode--1824. 最少侧跳次数[Minimum Sideway Jumps][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划(二维数组) (1)思路 (2)代 ...

  5. LeetCode——1888. 使二进制字符串字符交替的最少反转次数(Minimum Number of Flips to Make the Binary ...)[中等]——分析及代码(Java)

    LeetCode--1888. 使二进制字符串字符交替的最少反转次数[Minimum Number of Flips to Make the Binary String Alternating][中等 ...

  6. LeetCode——1947. 最大兼容性评分和(Maximum Compatibility Score Sum)[中等]——分析及代码(Java)

    LeetCode--1947. 最大兼容性评分和[Maximum Compatibility Score Sum][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 状态压缩 + 动态 ...

  7. LeetCode——1846. 减小和重新排列数组后的最大元素(Maximum Element After Decreasing and Rearranging)[中等]——分析及代码(Java)

    LeetCode--1846. 减小和重新排列数组后的最大元素[Maximum Element After Decreasing and Rearranging][中等]--分析及代码[Java] 一 ...

  8. LeetCode——909. 蛇梯棋(Snakes and Ladders)[中等]——分析及代码(Java)

    LeetCode--909. 蛇梯棋[Snakes and Ladders][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 广度优先搜索 (1)思路 (2)代码 (3)结果 三.其 ...

  9. LeetCode——802. 找到最终的安全状态(Find Eventual Safe States)[中等]——分析及代码(Java)

    LeetCode--802. 找到最终的安全状态[Find Eventual Safe States][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 反图 + 拓扑排序 (1)思路 ...

  10. LeetCode——1736. 替换隐藏数字得到的最晚时间(Latest Time by Replacing Hidden Digits)——分析及代码(Java)

    LeetCode--1736. 替换隐藏数字得到的最晚时间[Latest Time by Replacing Hidden Digits]--分析及代码[Java] 一.题目 二.分析及代码 1. 逐 ...

最新文章

  1. 对于继电器线圈奇怪的H-B曲线的实验测量
  2. c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc
  3. Caffe学习记录:Cifar-10 自定义网络训练记录
  4. JVM调优:GC标记清除回收算法
  5. mysql怎么消除冗余,mysql剔除冗余数据
  6. 计算几何 —— 二维几何基础 —— 三角形的面积
  7. mapreduce复制连接的代码_MapReduce:在大型集群上简化数据处理(2)
  8. pandas 替换 某列大于_Pandas使用总结
  9. PostgreSQL中的“use database_name”命令
  10. Linux 五种I/O模型
  11. 浙江省街道乡镇geo json地图数据全
  12. Qt+opencv二值化
  13. 获取秒级时间戳与毫秒级时间戳
  14. requests库手工识别验证码登录超星泛雅
  15. php 数字转人民币,php数字转人民币金额大写
  16. C# 操作Excel加水印
  17. ui设计入门书籍_书籍封面设计入门指南
  18. 重写equals方法一定要重写hashcode方法吗
  19. windows编程学习——1 关闭窗口不退出
  20. {转帖]图纸A0,A1,A2,A3,A4实际尺寸是多少?长和宽怎么分

热门文章

  1. 日语学习网站分类汇总
  2. spring注入sessionfactory
  3. Site App轻松创建移动开发
  4. java.lang.UnsupportedOperationException\r\n\tat java.sql.Date.toInstant(Date.java:304)
  5. 中国社会为何多犬儒?
  6. 暮雨小巷,殇了身影,冷了沙洲
  7. openwrt 19 overlay 空间不足_新桥胡同拆除19处违建!背街小巷“瘦身”后宽敞多了...
  8. 图片工厂设置背景颜色
  9. Qt编写地图综合应用12-路线查询
  10. 计算机连上wifi无法上网了,电脑已连接wifi但无法上网 已连接wifi但电脑无法上网-192路由网...