LeetCode 209. Minimum Size Subarray Sum in F#
URL
Minimum Size Subarray Sum - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/0209/main.fsx
open System
let minSubArray (target: int) (nums: int[]) : int =
let rec shrinkWindow left right sum target (nums: int[]) (ret: int) =
if sum < target then
left, sum, ret
else
let ret' = Math.Min(ret, right - left + 1)
let sum' = sum - nums.[left]
shrinkWindow (left + 1) right sum' target nums ret'
let rec minSubArray' left right sum target (nums: int[]) ret =
if right = nums.Length then
if ret = Int32.MaxValue then 0 else ret
else
let left', sum', ret' = shrinkWindow left right (sum + nums.[right]) target nums ret
minSubArray' left' (right + 1) sum' target nums ret'
minSubArray' 0 0 0 target nums (Int32.MaxValue)