LeetCode 875. Koko Eating Bananas in F#

URL

Koko Eating Bananas - LeetCode

Code

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/challenge/202303/koko_eating_bananas/main.fsx

open System

let minEatingSpeed (piles: int list) (h: int) : int =
    let check (piles: int[]) bananas h =
        let hours =
            Array.fold (fun acc n -> acc + (int (Math.Ceiling(double n / double bananas)))) 0 piles

        hours <= h

    let rec minEatingSpeed' (piles: int[]) left right =
        if left >= right then
            left
        else
            let mid = left + (right - left) / 2

            if check piles mid h then
                minEatingSpeed' piles left mid
            else
                minEatingSpeed' piles (mid + 1) right

    let piles' = piles |> List.sort |> Array.ofList
    minEatingSpeed' piles' 1 (piles'.[piles'.Length - 1])