18.在排序数组中搜索元素的开始位置和结束位置-二分查找法

package main

// @solution-sync:begin
func searchRange(nums []int, target int) []int {
    return []int{left(nums, target), right(nums, target)}
}

func left(nums []int, target int) int {
    l, r := 0, len(nums)-1
    for l <= r {
        m := l + (r-l)/2
        if nums[m] >= target {
            r = m - 1
        } else {
            l = m + 1
        }
    }
    if l >= len(nums) || nums[l] != target {
        return -1
    }
    return l
}

func right(nums []int, target int) int {
    l, r := 0, len(nums)-1
    for l <= r {
        m := l + (r-l)/2
        if nums[m] <= target {
            l = m + 1
        } else {
            r = m - 1
        }
    }
    if r < 0 || nums[r] != target {
        return -1
    }
    return r
}

Last updated