二分查找边界问题总结

本文总结了二分查找在处理边界问题时的常见陷阱,包括何时使用`<=`,更新start或end是否包含mid,以及返回结果的选择。通过三个经典的二分查找场景,详细解释了在不同情况下的正确做法,强调了正确理解while循环结束条件的重要性。
摘要由CSDN通过智能技术生成

二分查找很常见,思路也很清晰。
但是还是那句经典的话: 思路越简单,细节越丰富

二分查找 "恶心"人的地方有三个:

  1. while 里面是left <= right 还是 left < right ?
  2. 缩小区间的时候,left 和 right 要不要带上mid?(最可能引起死循环的原因)
  3. 返回啥 ? left 还是 right ?

有时候凭感觉写的对了,有时候就错了,这就是传说中的7分天注定,3分靠感觉!
coding的最终奥义,无脑编程!

拿最常用的三个 二分查找场景

  1. 寻找一个数
  2. 寻找一个数的最左侧出现的地方(左侧边界)
  3. 寻找一个数的最左侧出现的地方(右侧边界)

这三个场景其实可以抽象成两个:

  1. 找到这个数就返回
  2. 找到这个数不返回,继续往左/右找

废话不说,先上菜!
(我把所有可能产生疑问的地方标注出来单一在后面解释。)

case.1

int binary_search(int[] nums, int target) {
   
    int left = 0, right = nums.length - 1; 
    while(left <= right) {
    
        int mid = ((right - left) >> 1) + left;
        if (nums[mid] < target) {
   
            left = mid + 1;
        } else if (nums[mid] > target) {
   
            right = mid - 1; 
        
  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值