C++基础算法二分篇

简介: C++基础算法二分篇

📟作者主页:慢热的陕西人

🌴专栏链接:C++算法

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

主要讲解二分算法,分别讲解了整数二分和浮点二分


Ⅱ. 二分

思路:

二分的本质并不是单调性,二分的本质是存在一个边界使得点右边的区间满足条件,左边的区间不满足条件。

整数二分:

mid = (l + r + 1) >> 1

加一的原因:当l == r - 1 的时候这时候mid == l,那么当我们check成功的时候就将l = mid 相当于区间没有变死循环了;

if(check(mid)) l = mid;
else r = mid - 1;

mid = (l + r) >> 1

if(check(mid)) r = mid;
else l = mid + 1;

模板:

//区间为[l, r]被划分为[l, mid]和[mid + 1, r]时使用
//即符合条件的在mid左边,包括mid
int bsearch(int l, int r)
{
    while(l < r)
    {
        int mid = l + r >> 1;
        if(check(mid)) r = mid;//check()判断mid是否满足性质
        else l = mid + 1;
    }
    return l;
}
//区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用
//即符合条件的在mid右边包括mid
int bsearch(int l, int r)
{
    while(l < r)
    {
        int mid = (l + r + 1) >> 1;
        if(check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

浮点二分:

x 的平方根 - 力扣

double mySqrt(int x) 
    {
        double l = 0, r = x;
        while(r - l > 1e-11)
        {
            double mid = l + (r - l) / 2;
            if(mid * mid <= x) l = mid;
            else r = mid;
        }
        return r;
    }

到这本篇博客的内容就到此结束了。
如果觉得本篇博客内容对你有所帮助的话,可以点赞,收藏,顺便关注一下!
如果文章内容有错误,欢迎在评论区指正

相关文章
|
2月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
93 1
|
1月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
22 0
|
1月前
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
1月前
|
人工智能 算法 Java
【搜索算法】数字游戏(C/C++)
【搜索算法】数字游戏(C/C++)
|
2月前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
55 0
|
2月前
|
算法 安全 Serverless
超级好用的C++实用库之国密sm3算法
超级好用的C++实用库之国密sm3算法
58 0
|
2月前
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
68 0
|
3月前
|
算法 C++ 容器
C++标准库中copy算法的使用
C++标准库中copy算法的使用
27 1
|
3月前
|
算法 搜索推荐 C++
c++常见算法
C++中几种常见算法的示例代码,包括查找数组中的最大值、数组倒置以及冒泡排序算法。
27 0
|
3月前
|
算法 C++ 容器
【C++算法】双指针
【C++算法】双指针