一个比较bug free的二分写法

Posted shulin~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个比较bug free的二分写法相关的知识,希望对你有一定的参考价值。

lower_bound:

[l, r)区间内大于等于val的第一个位置

int lower_bound(int l, int r, int val){
    while(l < r){
        int mid = l + ((r - l) >> 1);
        if(a[mid] < val){
            l = mid + 1;
        }else{
            r = mid;
        }
    }
    return l;
}

upper_bound:

[l, r)区间内大于val的第一个位置

int upper_bound(int l, int r, int val){
    while(l < r){
        int mid = l + ((r - l) >> 1);
        if(a[mid] <= val){
            l = mid + 1;
        }else{
            r = mid;
        }
    }
    return l;
}

[l, r)区间内小于等于val的第一个位置:upper_bound(l, r, val) - 1

[l, r)区间内小于val的第一个位置:lower_bound(l ,r, val) -1

以上是关于一个比较bug free的二分写法的主要内容,如果未能解决你的问题,请参考以下文章

PHP 精度计算引发的灾难性Bug

算法:二分查找法

性能比较好的单例写法

vscode代码片段建议bug

Git 二分调试法,火速定位疑难Bug!

SDG精读与代码复现More Control for Free Image Synthesis with Semantic Diffusion GuidanceSDG