二分查找-模板

二分要注意边界

有单调性的题目一定可以用二分,但没有的话也可能可以用二分

二分的L,R端点取在哪里在于答案是否包含mid

 ①中,答案在绿色线中,②中,答案在红色线中,注意,红绿色线不一定是紧挨的,他们只是情况是否满足而是

为什么mid要+1取?如果l=r-1,即r=l+1

那么mid会变成(2l+1) / 2=l,如果此时check恰好为true,那么会陷入死循环

所以分析问题可以先考虑答案在哪个区间,再接着考虑调整左右端点

 

 

 

方法1-推荐/常用

 

方法2

  

方法3

  

 

二分查找的模板 https://www.luogu.com.cn/problem/P8814 基于此题而写 此题答案(用到二分):

  

 

 

 

浮点数二分:例子,求开平方根,sqrt(x)

少了麻烦的边界条件,直接赋值即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;
 
double x, L, R;
int main()
{
    scanf("%lf", &x);
    L=0, R=x;
    while (R-L>1e-8) //精度相差极小,即可退出 可以换成 for (int i=1; i<=100; i++),推荐while
    {
        double mid=(L+R)/2;
        if (mid*mid>=x) R=mid;
        else L=mid;
    }
    printf("%.5lf", L);
    return 0;
}

  


__EOF__

本文作者cnsdsg886-帥
本文链接https://www.cnblogs.com/didiao233/p/17794833.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cn是大帅哥886  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示