Seat Reservation Manager - Problem

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.

Input & Output

Example 1 — Basic Operations
$ Input: operations = ["SeatManager", "reserve", "reserve", "unreserve", "reserve"], values = [[5], [], [], [2], []]
Output: [null, 1, 2, null, 2]
💡 Note: Initialize with 5 seats (1-5 available). reserve() returns 1 (smallest). reserve() returns 2. unreserve(2) makes seat 2 available. reserve() returns 2 (seat 2 is the smallest available since seat 1 is still reserved).
Example 2 — Multiple Unreserve
$ Input: operations = ["SeatManager", "reserve", "reserve", "unreserve", "unreserve", "reserve"], values = [[3], [], [], [1], [2], []]
Output: [null, 1, 2, null, null, 1]
💡 Note: Initialize with 3 seats. Reserve seats 1 and 2. Unreserve both seats 1 and 2. Next reserve() returns 1 (smaller than 2).
Example 3 — Edge Case with Single Seat
$ Input: operations = ["SeatManager", "reserve", "unreserve", "reserve"], values = [[1], [], [1], []]
Output: [null, 1, null, 1]
💡 Note: Only 1 seat available. Reserve it (returns 1), unreserve it, reserve again (returns 1).

Constraints

  • 1 ≤ n ≤ 105
  • 1 ≤ seatNumber ≤ n
  • At most 105 calls will be made to reserve and unreserve

Visualization

Tap to expand
Seat Reservation Manager INPUT Initial: 5 Seats (All Available) 1 2 3 4 5 Available Reserved Operations: SeatManager(5) reserve() reserve() unreserve(2) reserve() Data Structure: Min-Heap [1, 2, 3, 4, 5] ALGORITHM STEPS 1 Initialize Min-Heap Push seats 1 to n into heap heap = [1,2,3,4,5] 2 reserve() - Pop Min Extract smallest from heap pop() --> 1, heap=[2,3,4,5] 3 reserve() - Pop Min Extract smallest again pop() --> 2, heap=[3,4,5] 4 unreserve(2) - Push Add seat back to heap push(2), heap=[2,3,4,5] 5 reserve() - Pop Min Seat 2 is now smallest pop() --> 2, heap=[3,4,5] Time: O(log n) per operation FINAL RESULT Final Seat State: 1 2 3 4 5 Seat 2 reserved (last reserve()) Output Array: [null, 1, 2, null, 2] Step-by-Step Results: SeatManager(5) --> null reserve() --> 1 reserve() --> 2 unreserve(2) --> null reserve() --> 2 OK Key Insight: A Min-Heap efficiently tracks available seats, always providing the smallest-numbered seat in O(log n) time. reserve() extracts the minimum, and unreserve() re-inserts the seat number back into the heap. TutorialsPoint - Seat Reservation Manager | Optimal Solution (Min-Heap)
Asked in
Amazon 15 Google 8 Microsoft 6
28.0K Views
Medium Frequency
~15 min Avg. Time
892 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen