LeetCode 560. Subarray Sum Equals K in F#
URL
leetcode.com/problems/subarray-sum-equals-k
Code
github.com/syohex/dotnet-study/blob/master/..
let cumulativeList (nums: int list) =
let rec cumulativeList' nums acc =
match nums with
| [] -> acc |> List.rev |> List.tail
| head :: tail ->
let v = head + (List.head acc)
cumulativeList' tail (v :: acc)
cumulativeList' nums [ 0 ]
let subarraySum (nums: int list) (k: int) : int =
let rec subarraySum' cums k m acc =
match cums with
| [] -> acc
| head :: tail ->
match Map.tryFind (head - k) m with
| None ->
match Map.tryFind head m with
| None -> subarraySum' tail k (Map.add head 1 m) acc
| Some w -> subarraySum' tail k (Map.add head (w + 1) m) acc
| Some v ->
match Map.tryFind head m with
| None -> subarraySum' tail k (Map.add head 1 m) (acc + v)
| Some w -> subarraySum' tail k (Map.add head (w + 1) m) (acc + v)
let cums = cumulativeList nums
let m = Map.empty |> Map.add 0 1
subarraySum' cums k m 0