LeetCode:1845. 座位预约管理系统(优先级队列 Java)

目录

[1845. 座位预约管理系统](#1845. 座位预约管理系统)

题目描述:

实现代码与解析:

优先级队列

原理思路:


1845. 座位预约管理系统

题目描述:

请你设计一个管理 n 个座位预约的系统,座位编号从 1n

请你实现 SeatManager 类:

  • SeatManager(int n) 初始化一个 SeatManager 对象,它管理从 1n 编号的 n 个座位。所有座位初始都是可预约的。
  • int reserve() 返回可以预约座位的 最小编号 ,此座位变为不可预约。
  • void unreserve(int seatNumber) 将给定编号 seatNumber 对应的座位变成可以预约。

示例 1:

复制代码
输入:
["SeatManager", "reserve", "reserve", "unreserve", "reserve", "reserve", "reserve", "reserve", "unreserve"]
[[5], [], [], [2], [], [], [], [], [5]]
输出:
[null, 1, 2, null, 2, 3, 4, 5, null]

解释:
SeatManager seatManager = new SeatManager(5); // 初始化 SeatManager ,有 5 个座位。
seatManager.reserve();    // 所有座位都可以预约,所以返回最小编号的座位,也就是 1 。
seatManager.reserve();    // 可以预约的座位为 [2,3,4,5] ,返回最小编号的座位,也就是 2 。
seatManager.unreserve(2); // 将座位 2 变为可以预约,现在可预约的座位为 [2,3,4,5] 。
seatManager.reserve();    // 可以预约的座位为 [2,3,4,5] ,返回最小编号的座位,也就是 2 。
seatManager.reserve();    // 可以预约的座位为 [3,4,5] ,返回最小编号的座位,也就是 3 。
seatManager.reserve();    // 可以预约的座位为 [4,5] ,返回最小编号的座位,也就是 4 。
seatManager.reserve();    // 唯一可以预约的是座位 5 ,所以返回 5 。
seatManager.unreserve(5); // 将座位 5 变为可以预约,现在可预约的座位为 [5] 。

提示:

  • 1 <= n <= 105
  • 1 <= seatNumber <= n
  • 每一次对 reserve 的调用,题目保证至少存在一个可以预约的座位。
  • 每一次对 unreserve 的调用,题目保证 seatNumber 在调用函数前都是被预约状态。
  • reserveunreserve 的调用 总共 不超过 105 次。

实现代码与解析:

优先级队列

java 复制代码
class SeatManager {


    public static PriorityQueue<Integer> priorityQueue;

    public SeatManager(int n) {
        priorityQueue = new PriorityQueue<>();
        for (int i = 1; i <= n; i++) {
            priorityQueue.add(i);
        }
    }

    public int reserve() {
        return priorityQueue.poll();
    }

    public void unreserve(int seatNumber) {
        priorityQueue.add(seatNumber);
    }
}

原理思路:

简单题,比较简单啊,最小堆维护一个可用座位即可。或者维护一个最小座位号和数组也行。

相关推荐
码农娟5 分钟前
Hutool XML工具-XmlUtil的使用
xml·java
你怎么知道我是队长7 分钟前
C语言---排序算法4---希尔排序法
c语言·算法·排序算法
草青工作室11 分钟前
java-FreeMarker3.4自定义异常处理
java·前端·python
iAkuya12 分钟前
(leetcode)力扣100 54实现Trie树
算法·leetcode·c#
java1234_小锋22 分钟前
Java中读写锁的应用场景是什么?
java·开发语言
闻哥22 分钟前
从 AJAX 到浏览器渲染:前端底层原理与性能指标全解析
java·前端·spring boot·ajax·okhttp·面试
「QT(C++)开发工程师」25 分钟前
C++ 多种单例模式
java·c++·单例模式
TracyCoder12328 分钟前
LeetCode Hot100(20/100)——19. 删除链表的倒数第 N 个结点
算法·leetcode
短剑重铸之日29 分钟前
《SpringCloud实用版》统一认证授权:Spring Authorization Server + OAuth2 + JWT 生产级方案
java·后端·spring·jwt·oauth2
hrrrrb31 分钟前
【算法设计与分析】随机化算法
人工智能·python·算法