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);
 */
相关推荐
yi0112 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
好想像大佬一样能够ak所有6 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111116 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
垆边人似月.10 小时前
华为OD算法题:查找众数及中位数
数据结构·算法·leetcode
CoderYanger10 小时前
一轮复习——F.动态规划模型总结(入门篇)
java·开发语言·数据结构·算法·leetcode·职场和发展·动态规划
浅念-11 小时前
动态规划专题:斐波那契数列模型 + 网格路径DP(LeetCode例题全解析)
笔记·算法·leetcode·面试·职场和发展·动态规划·推荐算法
夏幻灵12 小时前
每日一题:LeetCode 20:有效的括号——栈与哈希映射详解
算法·leetcode·哈希算法
Nil20813 小时前
leetcode 279完全平方数
算法·leetcode·职场和发展
longlongzihan13 小时前
前缀积与后缀积 —— LeetCode 238. 除了自身以外数组的乘积
开发语言·c++·leetcode
All for pursuit.13 小时前
【动态规划-1】121.买卖股票的最佳时机
数据结构·c++·算法·leetcode·动态规划