二分查找专题

本文探讨了二分查找在解决编程问题中的应用,重点解析了剑指53题中缺失数字的查找,强调了终止条件和区间选择的重要性。同时,文章提到了二分查找在处理重复元素时的局限性,并通过例子展示了寻找数组中目标值左右边界的方法,如LeetCode34题和33题。最后,讨论了如何使用二分查找优化计算x的n次幂的效率,并以leetcode287题为例,总结了二分查找的时间复杂度分析。
摘要由CSDN通过智能技术生成

剑指53:0~n-1中缺失的数字

  

      这里要说明一下为什么是l<=r。因为初始化时我的r赋值是nums.length-1而不是nums.length.这二者其实是有很大区别的。前者相当于两端都是闭区间【l,r】,后者相当与左闭右开区间【l,r)。然后当搜索区间为空的时候就应该终止。这里的while(l<=r)的终止条件就是l == r+1,也就是此时的搜索区间是【r+1,r】,这肯定是不可能的,所以这个时候循环终止是正确的。而while(l<r)的终止条件是l==r,这个时候区间为[r,r],即此时区间里面还有一个值,这个时候非空,假如这样就退出的话那么其实是还有nums[r]这个数没有判断过

     还有就是l = mid+1,r = mid-1问题:经常能看到有时候是r=mid,有时候是r=mid-1,这也需要理解。当我们发现mid不是我们要找的值的下标时,这个时候肯定想的是去搜索[l,mid-1]与[mid+1,r]区间,而mid已经确定不是了,因此就可以抛弃掉

    上述的算法还存在局限性,因为还有一类题,存在重复元素,然后要你找出左边界和有边界,那么上述算法就无能为力了。马上就会来一道找左侧边界和右侧边界的值。

 

 

寻找数组中的某个值,该值可能有重复,寻找它的最左侧值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值