LeetCode 35 搜索插入位置

题目:

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

解题:

二分查找

代码:


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

官方解答:


// 二分查找
func searchInsert(nums []int, target int) int {
    n := len(nums)
    left, right := 0, n - 1
    ans := n
    for left <= right {
        mid := (right - left) >> 1 + left
        if target <= nums[mid] {
            ans = mid
            right = mid - 1
        } else {
            left = mid + 1
        }
    }
    return ans
}

终于没使用暴力循环了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注