·二分模板

二分的前提是已排好序。

二分就是分为两段区间,区间之间的分界点需要在循环中不断更新,所以需要一个中间点mid标记更新区间的。


浮点数二分

    while(r - l >= 1e-8)//精度要看要求 浮点数末尾有.1
    {
        double mid = (l + r) / 2;
        if(check…) r = mid;
        else l = mid;
    }

这里就简单记住,直接等于mid就好了。


整数二分


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

       int l = 0,r = n - 1;
       while(l < r)
       {
           int mid = l + r + 1 >> 1;//要很注意,否则会进入死循环
           if(check…) l = mid;
           else r = mid - 1;
       }
  1. 因为是int型,当l、r差值为1时,l为3,r为4,则mid为l即3,则会进入死循环,所以要分别对前一部分和后一部分进行判断,且在对后一部判断更新的时候要对;
  2. 由于整形,所以在更新l、r的时候需要注意区间的开和闭(死记=.=)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值