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