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;
        }
    }

 

相关文章:

  • 2021-12-14
  • 2021-06-30
  • 2022-12-23
  • 2022-01-05
  • 2021-12-09
  • 2021-09-23
  • 2022-12-23
  • 2021-07-30
猜你喜欢
  • 2022-01-17
  • 2021-11-18
  • 2022-12-23
  • 2021-07-14
  • 2021-06-22
  • 2021-07-07
  • 2022-12-23
相关资源
相似解决方案