徒手实现lower_bound和upper_bound

Posted TQCAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了徒手实现lower_bound和upper_bound相关的知识,希望对你有一定的参考价值。

STL中lower_bound和upper_bound的使用方法:STL 二分查找

lower_bound:

    int obj=3;
    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]<obj){
            l=mid+1;
        }else{
            r=mid;
        }
    }

upper_bound:

    int obj=3;
    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]<=obj){
            l=mid+1;
        }else{
            r=mid;
        }
    }

(将上文的lower_bound的 < 替换为 <= 即可)

为便于记忆可以修改判断条件。

lower_bound:

    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]>=obj){
            r=mid;
        }else{
            l=mid+1;
        }
    }

upper_bound:

    int l=0;    //初始化 l ,为第一个合法地址
    int r=10;    //初始化 r , 地址的结束地址
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(arr[mid]>obj){
            r=mid;
        }else{
            l=mid+1;
        }
    }

 

以上是关于徒手实现lower_bound和upper_bound的主要内容,如果未能解决你的问题,请参考以下文章

Java实现 lower_bound() 和 upper_bound()

徒手实现一个web的session中间件

带你徒手完成基于MindSpore的CycleGAN实现

徒手打造一个朴素贝叶斯分类器

用Scala徒手实现 JSON Parser

关于set的lower_bound 和 std的lower_bound