LeetCode 1845. Seat Reservation Manager in F#
URL
Seat Reservation Manager - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/1845/main.fsx
#r "nuget: Fsharpx.Collections"
open FSharpx.Collections
type SeatManager =
{ seats: IPriorityQueue<int> }
static member init(n: int) : SeatManager =
let q =
seq { 1..n }
|> Seq.fold (fun acc i -> PriorityQueue.insert i acc) (PriorityQueue.empty false)
{ seats = q }
static member reserve(s: SeatManager) : (int * SeatManager) =
let i, q = PriorityQueue.pop s.seats
i, { seats = q }
static member unreserve (seatNumber: int) (s: SeatManager) : SeatManager =
let q = PriorityQueue.insert seatNumber s.seats
{ seats = q }