跳转至

LC34 - 在排序数组中查找元素的第一个和最后一个位置

SearchRange.go
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
}