lower_bound与upper_bound()用法笔记

lower_bound与upper_bound()用法笔记
原创正牌东风 最后发布于2018-07-23 21:10:23 阅读数 965 收藏
展开
头文件

#include <algorithm>

using namespace std;

lower_bound与upper_bound()查找一个元素的时间复杂度为O(log n);

一、数组中的lower_bound与upper_bound()
对于从小到大排序好的整型数组a[n],假设有a[5]={0,2,3,3,5},对于要查找的整型数val,有

1)int i=lower_bound(a,a+n,val)-a;

其中i返回值为数组中元素值大于等于val的第一个下标,相应地,如果数组中所有元素的值都小于val,则返回值为数组最后一个元素下标的下一个下标(另外一种说法是:i的返回值为val可以插入a数组的最前的位置)。

val=2,i=1;

val=3,i=2;

val=6,i=5;

2) int i=upper_bound(a,a+n,val)-a;

其中i返回值为数组中元素值大于val的第一个下标,相应地,如果数组中所有元素的值都小于等于val,则返回值为数组最后一个元素下标的下一个下标(另外一种说法是:i的返回值为val可以插入a数组的最后的位置)。

val=2,i=2;

val=3,i=4;

val=6,i=5;
————————————————
版权声明:本文为CSDN博主「正牌东风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/clz16251102113/java/article/details/81173950

对lower_bound的理解
原创imagination_wdq 最后发布于2018-12-03 13:34:00 阅读数 1001 收藏
展开
头文件:algorithm

 lower_bound()返回值是一个迭代器,返回指向比key大的第一个值的位置

第一个用法:返回值的下标。

#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int a[]={1,2,3,4,5,7,8,9};
printf("%d",lower_bound(a,a+8,6)-a);
//如果key是最大的,则返回值为数组的长度

return 0;
}
第二个用法:返回值的大小。

#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int a[]={1,2,3,4,5,7,8,9};
printf("%d",*lower_bound(a,a+8,6));
//如果key是最大的,返回值为0
return 0;
}
 
————————————————
版权声明:本文为CSDN博主「imagination_wdq」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42391248/java/article/details/84760477

原文地址:https://www.cnblogs.com/WAsbry/p/12688059.html