• Leetcode1845. Seat Reservation Manager (堆的应用)


    1. Seat Reservation Manager
      Medium
      Design a system that manages the reservation state of n seats that are numbered from 1 to n.

    Implement the SeatManager class:

    SeatManager(int n) Initializes a SeatManager object that will manage n seats numbered from 1 to n. All seats are initially available.
    int reserve() Fetches the smallest-numbered unreserved seat, reserves it, and returns its number.
    void unreserve(int seatNumber) Unreserves the seat with the given seatNumber.

    Example 1:

    Input
    [“SeatManager”, “reserve”, “reserve”, “unreserve”, “reserve”, “reserve”, “reserve”, “reserve”, “unreserve”]
    [[5], [], [], [2], [], [], [], [], [5]]
    Output
    [null, 1, 2, null, 2, 3, 4, 5, null]

    Explanation
    SeatManager seatManager = new SeatManager(5); // Initializes a SeatManager with 5 seats.
    seatManager.reserve(); // All seats are available, so return the lowest numbered seat, which is 1.
    seatManager.reserve(); // The available seats are [2,3,4,5], so return the lowest of them, which is 2.
    seatManager.unreserve(2); // Unreserve seat 2, so now the available seats are [2,3,4,5].
    seatManager.reserve(); // The available seats are [2,3,4,5], so return the lowest of them, which is 2.
    seatManager.reserve(); // The available seats are [3,4,5], so return the lowest of them, which is 3.
    seatManager.reserve(); // The available seats are [4,5], so return the lowest of them, which is 4.
    seatManager.reserve(); // The only available seat is seat 5, so return 5.
    seatManager.unreserve(5); // Unreserve seat 5, so now the available seats are [5].

    Constraints:

    1 <= n <= 105
    1 <= seatNumber <= n
    For each call to reserve, it is guaranteed that there will be at least one unreserved seat.
    For each call to unreserve, it is guaranteed that seatNumber will be reserved.
    At most 105 calls in total will be made to reserve and unreserve.

    解法1: 用set。

    class SeatManager {
    public:
        SeatManager(int n) {
            for (int i = 1; i <= n; i++) {
                unreserved.insert(i);
            }
        }
        
        int reserve() {
            int num = *unreserved.begin();
            unreserved.erase(num);
            return num;
        }
        
        void unreserve(int seatNumber) {
            unreserved.insert(seatNumber);
        }
    private:
        set<int> unreserved;
    };
    
    /**
     * Your SeatManager object will be instantiated and called as such:
     * SeatManager* obj = new SeatManager(n);
     * int param_1 = obj->reserve();
     * obj->unreserve(seatNumber);
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    实际上用priority_queue更好。

    class SeatManager {
    public:
        SeatManager(int n) {
            for (int i = 1; i <= n; i++) {
                minHeap.push(i);
            }
        }
        
        int reserve() {
            int num = minHeap.top();
            minHeap.pop();
            return num;
        }
        
        void unreserve(int seatNumber) {
            minHeap.push(seatNumber);
        }
    private:
        priority_queue<int, vector<int>, greater<int>> minHeap;
    };
    
    /**
     * Your SeatManager object will be instantiated and called as such:
     * SeatManager* obj = new SeatManager(n);
     * int param_1 = obj->reserve();
     * obj->unreserve(seatNumber);
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    登录业务实现(单点登录+微信扫码+短信服务)
    计算机组成原理 new07 真值和机器数 无符号整数 定点整数 定点小数 $\color{red}{Δ}$
    动态线程池框架 DynamicTp v1.0.6版本发布。还在为Dubbo线程池耗尽烦恼吗?还在为Mq消费积压烦恼吗?
    60 条 rsync 常用命令及其说明
    goLang笔记+beego框架
    Springboot毕设项目儿童医院问诊导诊系统aqy75(java+VUE+Mybatis+Maven+Mysql)
    1688按关键字搜索商品 API 返回值说明
    RPC vs. HTTP:谁主沉浮在网络通信的江湖?
    3年软件测试经验,不懂自动化基础...不知道我这种测试人员是不是要被淘汰了?​​
    全栈项目【尚医通】预约挂号系统项目介绍
  • 原文地址:https://blog.csdn.net/roufoo/article/details/133824110