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。

cpp 复制代码
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);
 */

实际上用priority_queue更好。

cpp 复制代码
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);
 */
相关推荐
Live&&learn4 小时前
算法训练-数据结构
数据结构·算法·leetcode
电子_咸鱼6 小时前
【STL string 全解析:接口详解、测试实战与模拟实现】
开发语言·c++·vscode·python·算法·leetcode
2501_9418846116 小时前
云计算与边缘计算:解锁未来计算架构的智能边界
leetcode
程序猿小白日记16 小时前
云计算与物联网融合:推动智慧城市的未来发展
leetcode
吗~喽17 小时前
【LeetCode】滑动窗口_水果成篮_C++
c++·算法·leetcode
小南家的青蛙18 小时前
LeetCode面试题 04.06 后继者
算法·leetcode·职场和发展
无敌最俊朗@19 小时前
力扣hot100 - 合并两个有序链表21
算法·leetcode·链表
墨染点香20 小时前
LeetCode 刷题【168. Excel 表列名称】
算法·leetcode·职场和发展
Swift社区20 小时前
LeetCode 431 - 将 N 叉树编码成二叉树
算法·leetcode·职场和发展
2501_941805931 天前
人工智能与大数据:驱动新时代的创新与决策
leetcode