二分查找与二分答案

 二分算法可以分为二分查找和二分答案。

以在一个升序数组中查找一个数为例。它每次考察数组当前部分的中间元素,如果中间元素刚好是要找的,就结束搜索过程;如果中间元素小于所查找的值,那么左侧的只会更小,不会有所查找的元素,只需到右侧查找;如果中间元素大于所查找的值同理,只需到左侧查找。

首先明确二分查找与二分答案有何区别?

二分查找:在一个已知的有序数据集上进行二分地查找
二分答案:答案有一个区间,在这个区间中二分,直到找到最优答案

敲黑板——重点

  • 最重要的就是明白什么时候使用二分;以及二分的边界判断;
  • 什么时候使用二分?
    二分分为二分查找、二分答案这两类
    • 二分查找:在一个有序的数据集上进行二分地查找 根据和目标值(需要查找的x)进行对比 O(log n)
      知道目标 然后在一个有序区间中 查找
    • 二分答案:答案有一个区间,我们在这个区间中进行二分,直到找到最优答案(而往往这个答案和一个变量有关系 他们之间存在单调性,这样在check()之后才知道,往左还是 往右进行下一次二分);
      知道目标在一个区间内 然后目标有一个判断是否符合的变量 每次二分之后都需要和变量比较 然后才会知道下一次往左 还是 往右进行二分 最后推出最优答案;

  • 二分基础模板
    往左 往右如何写边界——核心:下一次二分包含正确值
while(l<r){
 int mid = l+r >>1;
 if(check(mid)) r = mid;//check= true的时候 往左继续二分
 else l = mid +1;
}

while(l<r){
 int mid = l+r+1>>1;
 if(check(mid)) l=mid;
 else r = mid - 1;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值