[面试常问总结] 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 @   唯一客服系统开发笔记  阅读(154)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-05-22 [javascript] vuejs媒资库项目展示
点击右上角即可分享
微信分享提示
1
chat with us