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

知识点:二分查找

LeetCode第三十四题:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

结合两种情况下的二分查找的典型应用场景

语言:GoLang

func searchRange(nums []int, target int) []int {
    length := len(nums)
    result := []int{-1, -1}

    if length == 0 {
        return result
    }

    left, right := 0, length - 1
    for left < right {
        mid := (left + right) / 2
        if target <= nums[mid] {
            right = mid
        } else {
            left = mid + 1
        }
    }
    result[0] = right

    left, right = 0, length - 1
    for left < right {
        mid := (left + right + 1) / 2
        if nums[mid] <= target {
            left = mid
        } else {
            right = mid - 1
        }
    }
    result[1] = left

    // 即左右边界发生了交叉,或者相等的时候但是相等点的值 != target,即查无
    if result[0] > result[1] || (result[0] == result[1] && nums[result[0]] != target) {
        return []int{-1, -1}
    }

    return result
}
posted @ 2020-03-14 10:02  Cenyol  阅读(71)  评论(0)    收藏  举报