LeetCode 2090. K Radius Subarray Averages in F#

URL

K Radius Subarray Averages - LeetCode

Code

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/2090/main.fsx

let getAverage (nums: int[]) (k: int) : int[] =
    let len = Array.length nums
    let windowSize = 2 * k + 1

    if windowSize > len then
        Array.init len (fun _ -> -1)
    else
        let sum = Array.take windowSize nums |> Array.sum |> int64
        let windowSize' = int64 windowSize
        let ret = Array.init len (fun _ -> -1)
        ret.[windowSize - k - 1] <- (sum / windowSize') |> int

        seq { windowSize .. (len - 1) }
        |> Seq.fold
            (fun sum i ->
                let sum' = sum + (int64 nums.[i]) - (int64 nums.[i - windowSize])
                ret.[i - k] <- (sum' / windowSize') |> int
                sum')
            sum
        |> ignore

        ret