LeetCode 34. Find First and Last Position of Element in Sorted Array in F#

URL

leetcode.com/problems/find-first-and-last-p..

Code

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

let searchRange (nums: int []) (target: int) : (int * int) =
    let rec checkUnder pos (nums: int []) target =
        if pos < 0 then 0
        elif nums.[pos] <> target then pos + 1
        else checkUnder (pos - 1) nums target

    let rec checkUpper pos (nums: int []) target =
        if pos >= nums.Length then
            nums.Length - 1
        elif nums.[pos] <> target then
            pos - 1
        else
            checkUpper (pos + 1) nums target

    let rec searchRange' left right (nums: int []) target =
        if left > right then
            -1, -1
        else
            let mid = (left + right) / 2

            if nums.[mid] = target then
                checkUnder (mid - 1) nums target, checkUpper (mid + 1) nums target
            elif nums.[mid] < target then
                searchRange' (mid + 1) right nums target
            else
                searchRange' left (mid - 1) nums target

    searchRange' 0 (nums.Length - 1) nums target