LeetCode 16. 3Sum Closest in F#

URL

leetcode.com/problems/3sum-closest

Code

github.com/syohex/dotnet-study/blob/master/..

let threeSumClosest (nums: int list) (target: int) : int =
    let rec findMinDiff (nums: int []) i left right target ret =
        if left >= right then
            ret
        else
            let sum = nums.[i] + nums.[left] + nums.[right]

            if sum = target then
                0
            else
                let ret' =
                    if System.Math.Abs(target - sum) < System.Math.Abs(ret) then
                        target - sum
                    else
                        ret

                if sum < target then
                    findMinDiff nums i (left + 1) right target ret'
                else
                    findMinDiff nums i left (right - 1) target ret'


    let rec threeSumClosest' i (nums: int []) target minDiff =
        if i >= nums.Length then
            target - minDiff
        else
            let minDiff' =
                findMinDiff nums i (i + 1) (nums.Length - 1) target System.Int32.MaxValue

            if minDiff' = 0 then
                target
            else
                let minDiff'' =
                    if System.Math.Abs(minDiff') < System.Math.Abs(minDiff) then
                        minDiff'
                    else
                        minDiff

                threeSumClosest' (i + 1) nums target minDiff''

    let nums' = nums |> List.sort |> List.toArray
    threeSumClosest' 0 nums' target System.Int32.MaxValue