整数二分

时间:2022-05-27 21:17:51   收藏:0   阅读:20

整数二分

重新开始写一遍二分吧。其实看起来很简单,但是写的时候细节确实很多,不小心就会写错。

功利一点,先从板子开始吧。

bool check(int x)
{ /* ... */
} // 检查x是否满足某种性质

// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(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]时使用:
int bsearch_2(int l, int r)
{
    while (l < r) {
        int mid = l + r + 1 >> 1;
        if (check(mid))
            l = mid;
        else
            r = mid - 1;
    }
    return l;
}

主体真的很简单,整个流程:

参考博客:

常用代码模板1——基础算法 - AcWing

AcWing 789. 二分模板笔记 - AcWing

原文:https://www.cnblogs.com/Salty-Fish/p/15349675.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!