[面试常问总结] 15. 搜索插入位置 (二分法,找不到的就是当前位置+1)

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

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5
输出: 2
示例 2:

输入: [1,3,5,6], 2
输出: 1
示例 3:

输入: [1,3,5,6], 7
输出: 4
示例 4:

输入: [1,3,5,6], 0
输出: 0

//二分查找
func SearchInsert(nums []int, target int) int {
    i := 0
    length := len(nums)
    j := length - 1
    //根据题意增加的条件判断
    //小于等于第一个的时候,是0
    if target <= nums[0] {
        return 0
    }

    if target == nums[j] {
        return j
    }
    //大于最后一个的时候是最后位置+1
    if target > nums[j] {
        return j + 1
    }
    //在这范围内的时候,二分查找
    for i <= j {
        //找出中间的位置
        mid := i + (j-i)/2
        //比中间位置小,j是mid-1
        if target < nums[mid] {
            j = mid - 1
            //比中间位置大,i是mid+1
        } else if target > nums[mid] {
            i = mid + 1
        } else {
            //相等的时候就是找到了
            return mid
        }

    }
    //当i等于j的时候,到这个里的,都是二分查找没找到的,那么就是当前位置+1
    return j + 1
}

 

posted @ 2021-05-22 15:03  唯一客服系统开发笔记  阅读(164)  评论(0)    收藏  举报