LeetCode 34. Find First and Last Position of Element in Sorted Array in F#
URL
34. Find First and Last Position of Element in Sorted Array
Code
https://github.com/syohex/dotnet-study/blob/master/fsharp/leetcode/problems/0034/main.fsx
let searchRange (nums: int[]) (target: int) : (int * int) =
let rec searchRange' (nums: int[]) left right target leftBound =
if left > right then
None
else
let mid = left + (right - left) / 2
if nums.[mid] = target then
if leftBound then
if mid = left || nums.[mid - 1] <> target then
Some(mid)
else
searchRange' nums left (mid - 1) target leftBound
else if mid = right || nums.[mid + 1] <> target then
Some(mid)
else
searchRange' nums (mid + 1) right target leftBound
elif nums.[mid] < target then
searchRange' nums (mid + 1) right target leftBound
else
searchRange' nums left (mid - 1) target leftBound
match searchRange' nums 0 (nums.Length - 1) target true with
| None -> (-1, -1)
| Some(leftBound) ->
match searchRange' nums 0 (nums.Length - 1) target false with
| None -> failwith "never reach here"
| Some(rightBound) -> (leftBound, rightBound)