徒手实现lower_bound和upper_bound

时间:2022-09-28 17:47:24

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