LeetCode 135. Candy in F#

URL

leetcode.com/problems/candy

Code

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

let candy (ratings: int list) : int =
    let rec candy' ratings prev acc =
        match ratings with
        | [] -> acc |> List.rev
        | h :: t ->
            if prev < h then
                candy' t h ((acc.Head + 1) :: acc)
            else
                candy' t h (1 :: acc)

    let lefts = candy' ratings.Tail ratings.Head [ 1 ]
    let rev = ratings |> List.rev
    let rights = candy' rev.Tail rev.Head [ 1 ]

    lefts
    |> List.zip (rights |> List.rev)
    |> List.fold (fun acc (l, r) -> acc + System.Math.Max(l, r)) 0