LeetCode 442. Find All Duplicates in an Array in F#

URL

Find All Duplicates in an Array - LeetCode

Code

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

let findDuplicates (nums: int[]) : int list =
    let rec findDuplicates' i (nums: int[]) acc =
        if i >= nums.Length then
            List.rev acc
        else
            let idx = System.Math.Abs(nums.[i]) - 1

            if nums.[idx] >= 0 then
                let acc' = (idx + 1) :: acc
                nums.[idx] <- nums.[idx] * -1
                findDuplicates' (i + 1) nums acc'
            else
                findDuplicates' (i + 1) nums acc

    Array.iter
        (fun (num: int) ->
            let idx = System.Math.Abs(num) - 1
            nums.[idx] <- nums.[idx] * -1)
        nums

    findDuplicates' 0 nums []