Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Program to implement seat reservation manager in Python
A seat reservation manager system tracks the availability of n seats numbered from 1 to n. We need to implement a SeatReserveManager class that can reserve the smallest available seat and unreserve specific seats efficiently.
Problem Requirements
The SeatReserveManager class should have:
Constructor that takes n as input and initializes n seats numbered from 1 to n. Initially all seats are available.
reserve() method that finds the smallest-numbered unreserved seat, reserves it, and returns its number.
unreserve(seatNumber) method that unreserves a previously reserved seat with the given seat number.
Algorithm Approach
We use two key components:
current_seat− tracks the highest seat number reserved so farempty_seats− stores previously reserved seats that have been unreserved
The reserve method first checks if any unreserved seats are available, otherwise assigns the next sequential seat.
Implementation
class SeatReserveManager:
def __init__(self, n):
self.current_seat = 0
self.empty_seats = []
def reserve(self):
if len(self.empty_seats) > 0:
s = min(self.empty_seats)
self.empty_seats.remove(s)
return s
self.current_seat += 1
return self.current_seat
def unreserve(self, seatNumber):
self.empty_seats.append(seatNumber)
# Example usage
obj = SeatReserveManager(7)
print(obj.reserve()) # Reserve seat 1
print(obj.reserve()) # Reserve seat 2
print(obj.reserve()) # Reserve seat 3
obj.unreserve(2) # Unreserve seat 2
obj.unreserve(5) # Unreserve seat 5 (not yet reserved)
print(obj.reserve()) # Reserve seat 2 (smallest available)
print(obj.reserve()) # Reserve seat 4 (next sequential)
1 2 3 2 4
How It Works
Let's trace through the example step by step:
obj.reserve() − No empty seats, current_seat becomes 1, returns 1
obj.reserve() − No empty seats, current_seat becomes 2, returns 2
obj.reserve() − No empty seats, current_seat becomes 3, returns 3
obj.unreserve(2) − Adds seat 2 to empty_seats list
obj.unreserve(5) − Adds seat 5 to empty_seats list
obj.reserve() − Finds seat 2 as minimum in empty_seats, removes and returns it
obj.reserve() − Finds seat 5 in empty_seats, removes and returns it
Time Complexity
reserve() − O(n) in worst case due to finding minimum in empty_seats list
unreserve() − O(1) for appending to list
Conclusion
This seat reservation manager efficiently handles seat booking by maintaining unreserved seats in a list and tracking the highest assigned seat. The system ensures the smallest available seat number is always assigned first.
