难度:中等
题目:请你设计一个管理 n
个座位预约的系统,座位编号从 1
到 n
。
请你实现 SeatManager
类:
SeatManager(int n)
初始化一个SeatManager
对象,它管理从1
到n
编号的n
个座位。所有座位初始都是可预约的。int reserve()
返回可以预约座位的 最小编号 ,此座位变为不可预约。void unreserve(int seatNumber)
将给定编号seatNumber
对应的座位变成可以预约。
解题过程:
import bisect
class SeatManager:
def __init__(self, n: int):
self.VacantSeat = list(range(1,n+1))
def reserve(self) -> int:
return self.VacantSeat.pop(0)
def unreserve(self, seatNumber: int) -> None:
return bisect.insort(self.VacantSeat, seatNumber)
结果:
总结:
1. 初始座位状态:可以用一个列表存储当前所有可预约的座位编号,初始时包含所有编号 [1, 2, ..., n],并且保持列表有序。
2. 保持列表有序:当座位编号恢复为可预约时,使用 bisect.insort 函数,将座位插入到正确的位置,确保列表中的座位始终按升序排列。