LeetCode 1338. Reduce Array Size to The Half in F#

URL

leetcode.com/problems/reduce-array-size-to-..

Code

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

let minSetSize (arr: int list) : int =
    let rec minSetSize' counts i sum half nums =
        match counts with
        | [] -> nums
        | h :: t ->
            let sum' = sum + h

            if sum' >= half then
                i + 1
            else
                minSetSize' t (i + 1) sum' half nums


    let counts =
        arr
        |> List.fold
            (fun acc num ->
                match Map.tryFind num acc with
                | None -> Map.add num 1 acc
                | Some (v) -> Map.add num (v + 1) acc)
            Map.empty
        |> Map.values
        |> Seq.sortWith (fun a b -> compare b a)
        |> Seq.toList

    let half = arr.Length / 2
    let nums = counts.Length
    minSetSize' counts 0 0 half nums