LeetCode 1695. Maximum Erasure Value in F#

URL

leetcode.com/problems/maximum-erasure-value

Code

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

let maximumUniqueSubarray (nums: int list) : int =
    let rec maximumUniqueSubarray' nums i start (acc: int []) pos ret =
        match nums with
        | [] -> ret
        | h :: t ->
            acc.[i + 1] <- acc.[i] + h

            match Map.tryFind h pos with
            | None ->
                let ret' = acc.[i + 1] - acc.[start]
                maximumUniqueSubarray' t (i + 1) start acc (Map.add h i pos) ret'
            | Some (p) ->
                let start' = System.Math.Max(start, p + 1)
                let ret' = acc.[i + 1] - acc.[start']
                maximumUniqueSubarray' t (i + 1) start' acc (Map.add h i pos) ret'

    let acc = Array.zeroCreate (nums.Length + 1)
    maximumUniqueSubarray' nums 0 0 acc Map.empty 0