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 far

  • empty_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.

Updated on: 2026-03-26T14:43:08+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements