lower_bound()与upper_bound()_k=lower_bound(a+1,a+2+n,b[i])-a,m=upper_bound(c+1,-程序员宅基地

技术标签: 算法  c++  数据结构  


lower_bound()函数与upper_bound()函数在头文件中;
使用时添加头文件:

#include <algorithm>

解释:lower_bound()和upper_bound()为二分法查找元素,其时间复杂度为O(log n)。
使用条件:有序数组。

一,在数组中使用lower_bound()upper_bound()

1. int i_lower = lower_bound(arr, arr + n, val) - arr;
作用:lower_bound()函数返回数组 arr 中大于等于 val 的第一个元素的地址,若arr中的元素均小于 val 则返回尾后插入val位置地址。

2. int i_upper = upper_bound(arr, arr + n, 8) - arr
作用:upper_bound()函数返回数组 arr 中大于 val 的第一个元素的地址,若 arr 中的元素均小于等于 val 则返回尾后插入val位置地址。
示例:

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    
    const int n = 6;
	int arr[n]{
     0,1,5,8,10,11};
	int i_lower = lower_bound(arr, arr + n, 8) - arr;//大于等于8
    int i_upper = upper_bound(arr, arr + n, 8) - arr;//大于8
	cout << "i_lower:" << i_lower << endl;//i_lower:3
    cout << "i_upper:" << i_upper << endl;//i_upper:4
	int j_lower = lower_bound(arr, arr + n, 10) - arr;
    int j_upper = upper_bound(arr, arr + n, 10) - arr;
	cout << "j_lower:" << j_lower << endl;//j_lower:4
    cout << "j_upper:" << j_upper << endl;//j_upper:5
	return 0;
}

二、STL中的lower_bound()和upper_bound()

用法与数组中基本一样,但在STL中,返回值为迭代器。但在vector中,可以是迭代器也可以是位置。
(1)vector动态数组

int main()
{
    
	vector<int> vec{
     0,1,5,8,10,11};//有序数组
	vector<int>::iterator it1 = lower_bound(vec.begin(), vec.end(), 11);
	bool flag1 = it1 == vec.end() - 1;
	cout << flag1 << endl;//it1指向最后一个元素的迭代器
    unsigned i_lower = lower_bound(vec.begin(), vec.end(), 11) - vec.begin();
    cout << "i_lower:" << i_lower << endl;//位置5

	vector<int>::iterator it2 = upper_bound(vec.begin(), vec.end(), 11);
	bool flag2 = it2 == vec.end();
	cout << flag2 << endl;//it2为尾后迭代器
    unsigned j_upper = upper_bound(vec.begin(), vec.end(), 11) - vec.begin();
    cout << "j_upper:" << j_upper << endl;//位置6
	return 0;
}

运行结果

1
i_lower:5
1
j_upper:6

3) set集合(去重)

#include<algorithm>
#include<set>
using namespace std;

int main()
{
    
	set<int> s{
     0,2,5,8,11};//原本就有序
	set<int>::iterator it1 = s.lower_bound(2);
	cout << *it1 << endl;
	set<int>::iterator it2 = s.upper_bound(2);
	cout << *it2 << endl;
	return 0;
}

运行结果:

2
5

(3)map字典

#include<algorithm>
#include<map>
using namespace std;

int main()
{
    
	map<int, int> m{
     {
    1,2},{
    2,2},{
    9,2},{
    7,2} };//有序
	map<int, int>::iterator it1 = m.lower_bound(2);
	cout << it1->first << endl;//it1->first=2
	map<int, int>::iterator it2 = m.upper_bound(2);
	cout << it2->first << endl;//it2->first=7;
	return 0;
}

运行结果:

2
7

参考:https://blog.csdn.net/weixin_42051815/article/details/115873582

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Boruson/article/details/125702597

智能推荐

机器学习实战(七)_loadsimpdata-程序员宅基地

文章浏览阅读265次。title: 机器学习实战(七)date: 2020-04-07 09:20:50tags: [AdaBoost, bagging, boosting, ROC]categories: 机器学习实战更多内容请关注我的博客利用AdaBoost元算法提高分类性能在做决定时,大家可能会吸取多个专家而不是一个人的意见,机器学习也有类似的算法,这就是元算法(meta-algorithm)。元算法是对其他算法进行组合的一种方式。基于数据集多重抽样的分类器前面已经学习了五种不同的分类算法,它们各有优._loadsimpdata

python内置数据结构---字符串_python 中列表 choice.lower()-程序员宅基地

文章浏览阅读217次。字符串str:单引号,双引号,三引号引起来的字符信息。数组array:存储同种数据类型的数据结构。[1, 2, 3], [1.1, 2.2, 3.3]列表list:打了激素的数组, 可以存储不同数据类型的数据结构. [1, 1.1, 2.1, 'hello']元组tuple:带了紧箍咒的列表, 和列表的唯一区别是不能增删改。集合set:不重复且无序的。 (交集和并集)字典dict:{“name”:"westos", "age":10# 1. 字符串str字符串或串(String)是由数字、字母_python 中列表 choice.lower()

超实用可执行程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译-python GUI_文献翻译复制的时候都是回车-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏3次。超实用python程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译超实用python程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译痛点界面与功能功能详细说明:过程记录代码和组件分析exe程序生成记录结语痛点PDF文档文字复制会包括回车符,使得文字粘贴和翻译都不方便,尤其是对于双栏的PDF。界面与功能以下为详细说明和..._文献翻译复制的时候都是回车

求正整数N以内的所有勾股数。 所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。_编写程序,计算0到输入的整数n范围内的勾股数。假设3个正整数x、y和z是勾股数,-程序员宅基地

文章浏览阅读291次。#include"stdio.h"void main(){int n;int i,j,k;int count=0;while(scanf("%d",&n)){for(i=1;i<=n;++i)for(j=i+1;j<=n;++j)for(k=j+1;k<=n;++k)if(ii+jj==k*k){printf("[%d,%d,%d], ",i,j,k);count++;}printf(“total number: %d\n”,count);}}_编写程序,计算0到输入的整数n范围内的勾股数。假设3个正整数x、y和z是勾股数,

基于FPGA的BPSK、QPSK以及OQPSK实现_fpga实现bpsk调制-程序员宅基地

文章浏览阅读2.8k次,点赞10次,收藏56次。在现代通信领域中,大多数的信道因具有带通特性而不能直接传送基带信号,为了使数字信号能在带通信道中传输,必须用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。二进制相移键控(BSPK)、正交相移键控(QPSK)、偏置正交相移键控(OQPSK)是重要的调制方式,被广泛地应用于现代通信的各个领域。_fpga实现bpsk调制

编写一个 函数把华氏温度转化为 摄氏温度,转换公式用递归的方法 编写 函数求Fibonacci级数。编写函数求两个数的最大公约数和最小公倍数_编写一个函数,将华氏温度转换为摄氏温度。公式为c=(f-32)×5/9。-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏24次。编写一个 函数把华氏温度转化为 摄氏温度,转换公式:C=(F-32)*5/9//编写一个 函数把华氏温度转化为 摄氏温度,转换公式:C=(F-32)*5/9#include<iostream>#include<cmath>using namespace std;double Transform(double F) { return (F - 32) * 5 / 9;}int main() { double F; cout << "请输入华氏._编写一个函数,将华氏温度转换为摄氏温度。公式为c=(f-32)×5/9。

随便推点

ActiveMQ-cpp客户端程序应用异常退出问题_activemq-cpp客户端stop会奔溃-程序员宅基地

文章浏览阅读1.9k次。笔者使用ActiveMQ作为系统中消息分发的服务器,由Java Web程序读取数据库实时记录作为Producer,接收端为C++Builder开发的客户端程序,常驻客户端右下角,弹窗显示实时消息。测试时发现,当客户端断网(网线拔掉)或者服务器重启等连接中断时,客户端会直接退出,windows也没有报程序崩溃的问题,很是费解。 Debug调试代码发现问题出在自定义的Concumer_activemq-cpp客户端stop会奔溃

php中对类中静态方法和静态属性的学习和理解_静态属性和静态方法的特点-程序员宅基地

文章浏览阅读1.7k次。什么是静态方法或静态属性 static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法静态方法的特点 1.static方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用! 2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。 3.静态方法和..._静态属性和静态方法的特点

遇到问题---thrift--python---ImportError: No module named thrift_importerror:no module named thrift.thrift-程序员宅基地

文章浏览阅读9.1k次。情况我们在启动hbase的thrift服务后使用python来进行测试连接hbase时报错ImportError: No module named thrift。完整报错如下:[root@host252 thrift]# python test.pyTraceback (most recent call last): File "test.py", line 3, in &l..._importerror:no module named thrift.thrift

华科电气专业转计算机专业,华中科技大学转专业-程序员宅基地

文章浏览阅读1k次。关于转专业,华科有两次机会,大一下是可以跨大类转,当然也可以在大类内部转;大二下是只能在学科大类内部转。华科有以下几个大类 信息大类、机械大类、土建环大类、电气大类、文科大类。跨大类转时信息大类与临床医学是不能转入的,但可以通过考光电中法班,通信中英班的方式转入,但是学费要高些,而且毕业是出国的(当然也可以选择不出)。很多同学对船舶与海洋工程不了解,其实这个专业就业非常不错,比信息大类内的不少专业..._华中科技大学转专业机会

spring cloud的RefreshScope注解进行热部署_spring refresh 热部署-程序员宅基地

文章浏览阅读2.5w次,点赞5次,收藏36次。需要热加载的bean需要加上@RefreshScope注解,当配置发生变更的时候可以在不重启应用的前提下完成bean中相关属性的刷新。经由@RefreshScope修饰的bean将会被RefreshScope代理,其关于bean生命周期的相关方法也在此定义。@ManagedOperation(description = "Dispose of the current instanc..._spring refresh 热部署

php抓取网指定内容,php获取网页内容方法总结-程序员宅基地

文章浏览阅读388次。抓取到的内容在通过正则表达式做一下过滤就得到了你想要的内容,至于如何用正则表达式过滤,在这里就不做介绍了,有兴趣的,以下就是几种常用的用php抓取网页中的内容的方法。1.file_get_contentsPHP代码复制代码代码如下:$url="http://www.jb51.net";$contents=file_get_contents($url);//如果出现中文乱码使用下面代码//$getc..._php正则截取file_get_contents里的域名

推荐文章

热门文章

相关标签