package BinarySearch
func searchRange(nums []int, target int) []int {
if find(nums, target) {
return []int{findLeft(nums, target), findRight(nums, target)}
} else {
return []int{-1, -1}
}
}
func find(nums []int, target int) bool {
for l, r := 0, len(nums)-1; l <= r; {
m := (l + r) / 2
if nums[m] == target {
return true
} else if nums[m] > target {
r = m - 1
} else {
l = m + 1
}
}
return false
}
func findLeft(nums []int, target int) int {
ans := len(nums)
for l, r := 0, len(nums)-1; l <= r; {
m := (l + r) / 2
if nums[m] >= target {
ans = m
r = m - 1
} else {
l = m + 1
}
}
return ans
}
func findRight(nums []int, target int) int {
ans := -1
for l, r := 0, len(nums)-1; l <= r; {
m := (l + r) / 2
if nums[m] <= target {
ans = m
l = m + 1
} else {
r = m - 1
}
}
return ans
}