Seat Reservation Manager

MediumDesignHeap (Priority Queue)

Solution

import { Heap, range } from '@algorithm/lib';
 
export class SeatManager {
  private readonly seats: Heap<number>;
  constructor(n: number) {
    this.seats = new Heap((a, b) => a - b);
    for (const seatNumber of range(1, n + 1)) {
      this.seats.push(seatNumber);
    }
  }
 
  reserve(): number {
    const seatNumber = this.seats.pop();
    if (seatNumber === undefined) {
      throw new Error('There are no unreserved seats.');
    }
    return seatNumber;
  }
 
  unreserve(seatNumber: number): void {
    this.seats.push(seatNumber);
  }
}