二分算法总结

二分算法介绍

        二分算法就是找到满足条件的边界,并且不断缩小范围直到找到满足条件的数据为止。

        注意:使用二分算法并不需要满足单调性,二分并不是按照大小来分的,只要满足某个条件都可以用来二分。

二分算法和二查找

        二分算法是用来查找满足条件的区间和位置的,二分查找是找到一个特定的数值;

二分算法的运算逻辑

        主要是找到两个边界点,再一直更新区间,直到找符合条件的区间就可以停止了。

        边界问题:1. 主要是存在左右边界点的边界问题,处理不好很有可能就会陷入到死循环之中;

        边界问题描述:①  当边界点mid在右边的时候,就会发生边界问题,即如果不满足不满足的条件就会使得,左边界点在右边,满足满足条件的时候同时遍历到最后一个的前一个,l=r-1,mid = l + r >> 1,即等同于mid = r + r - 1,因为是语言向下取整的,所以mid还是等于r-1,就会一直陷入死循环,所以当左边界在右边的时候,就需要mid + 1才可以;即 mid = l + r + 1 >> 1;就可以避免死循环的情况。

                                ②当右边界在左边的时候就不需要进行处理,因为当r遍历到最前面的数的后一个时,r = l + 1,mid = l + l + 1,向下取整的话就是l,左边界和右边界就重合了,所以并不需要进行特殊处理。

代码模板

当寻找不满足判断条件的二分的模板(即右边界点左边)

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

    return l;
}

当寻找满足判断条件的二分的模板(即左边界点在右边的时候)

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

    return l; 
}

结果返回的情况判断

        二分算法是一定有返回值的,因为两个指针一定会相遇;

        如果放回不存在的情况,并不是返回结果值,而是判断这个返回值是否满足了题目需要,符合题目的条件就返回这个值,没有符合条件就返回题目要求的结果。

        二分算法返回l和r都是可以的,因为两个最后的结果都是一样的,会碰到一起然后就会停止。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GK742

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

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

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

打赏作者

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

抵扣说明:

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

余额充值