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)