LeetCode 1642. Furthest Building You Can Reach in F#

URL

leetcode.com/problems/furthest-building-you..

Code

github.com/syohex/dotnet-study/blob/master/..

#r "nuget:FSharpx.Collections"

open FSharpx.Collections

let furthestBuilding (heights: int list) (bricks: int) (ladders: int) : int =
    let rec furthestBuilding' (q: IPriorityQueue<int>) qLen prev i heights bricks ladders =
        match heights with
        | [] -> i
        | h :: t ->
            let diff = h - prev

            if diff <= 0 then
                furthestBuilding' q qLen h (i + 1) t bricks ladders
            else
                let q' = PriorityQueue.insert diff q
                let qLen' = qLen + 1

                if qLen' <= ladders then
                    furthestBuilding' q' qLen' h (i + 1) t bricks ladders
                else
                    let min, q'' = PriorityQueue.pop q'
                    let bricks' = bricks - min

                    if bricks' < 0 then
                        i
                    else
                        furthestBuilding' q'' qLen h (i + 1) t bricks' ladders

    let q = PriorityQueue.empty false
    furthestBuilding' q 0 heights.Head 0 heights.Tail bricks ladders