LeetCode 740. Delete and Earn in F#
URL
leetcode.com/problems/delete-and-earn
Code
github.com/syohex/dotnet-study/blob/master/..
let numsToFrequences (nums: int list) : Map<int, int> =
nums
|> List.fold
(fun acc n ->
match Map.tryFind n acc with
| None -> Map.add n 1 acc
| Some (v) -> Map.add n (v + 1) acc)
Map.empty
let deleteAndEarn (nums: int list) : int =
let rec deleteAndEarn' i limit prevMax2 prevMax1 freq =
if i > limit then
prevMax1
else
let v = match Map.tryFind i freq with
| None -> 0
| Some(v) -> v
let curMax = prevMax2 + (i * v)
if curMax > prevMax1 then
deleteAndEarn' (i + 1) limit prevMax1 curMax freq
else
deleteAndEarn' (i + 1) limit prevMax1 prevMax1 freq
let freq = numsToFrequences nums
let maxValue = Map.keys freq |> Seq.max
let prevMax1 =
match Map.tryFind 1 freq with
| None -> 0
| Some (v) -> v
deleteAndEarn' 2 maxValue 0 prevMax1 freq