LeetCode 1046. Last Stone Weight in F#
URL
leetcode.com/problems/last-stone-weight
Code
github.com/syohex/dotnet-study/blob/master/..
#r "nuget:FSharpx.Collections"
open FSharpx.Collections
let lastStoneWeight (stones: int list) : int =
let rec lastStoneWeight' q =
if PriorityQueue.isEmpty q then
0
else
let first, rest = PriorityQueue.pop q
if PriorityQueue.isEmpty rest then
first
else
let second, rest' = PriorityQueue.pop rest
if first = second then
lastStoneWeight' rest'
else
lastStoneWeight' (rest' |> PriorityQueue.insert (first - second))
let q =
stones
|> List.fold (fun q n -> PriorityQueue.insert n q) (PriorityQueue.empty true)
lastStoneWeight' q