二分查找的三种方式比较

文章介绍了三种不同的二分查找算法模板在Go语言中的实现,包括常用模板一、模板二和推荐使用的模板三。每个模板都涉及到left和right指针的更新,以及在循环退出条件和后处理步骤中的差异。模板三在处理过程中能更有效地缩小搜索范围。
摘要由CSDN通过智能技术生成

二分查找的三种方式

Go语言版本
仅仅是语言格式不同,但是重在条件的改变

二分查找

三个模板共性:mid = left+(right-left)/2

模板一:(常用)

1、初始化 left=0 和 right=len(nums)-1
2、for循环退出条件为,left <= right
3、left = mid+1
4、right = mid-1

func search(nums []int, target int) int {
    // 模板一
    left := 0
    right := len(nums)-1
    for left <= right {
        mid := left+(right-left)/2
        if nums[mid] == target {
            return mid
        } else if nums[mid] > target {
            right = mid-1
        } else {
            left = mid+1
        }
    }  
    return -1
}
模板二:

1、初始化 left=0 和 right=len(nums)
2、for循环退出条件为,left < right
3、left = mid+1
4、right = mid
5、需要后处理

模板三:(记住并使用,常用)

1、初始化 left=0 和 right=len(nums)-1
2、for循环退出条件为,left+1 < right
3、left = mid
4、right = mid
5、需要后处理

func search(nums []int, target int) int {
    start := 0
    end := len(nums)-1
    for start+1 < end {
        mid := start + (end-start)/2
        if nums[mid] == target {
            end = mid
        } else if nums[mid] < target {
            start = mid
        } else if nums[mid] > target {
            end = mid
        }
    }
    // 后处理,判断最后两个元素是否符合
    if nums[start] == target {
        return start
    }
    if nums[end] == target {
        return end
    }
    return -1
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值