LeetCode 875. Koko Eating Bananas in F#

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

            let sum =
                piles
                |> List.fold (fun acc n -> acc + (n / mid) + (if n % mid = 0 then 0 else 1)) 0

            if sum <= h then
                minEatingSpeed' piles h left mid
            else
                minEatingSpeed' piles h (mid + 1) right

    let max = piles |> List.max
    minEatingSpeed' piles h 1 max

minEatingSpeed [ 3; 6; 7; 11 ] 8
minEatingSpeed [ 30; 11; 23; 4; 20 ] 5
minEatingSpeed [ 30; 11; 23; 4; 20 ] 6