函数 - lower_bound&upper_bound

君义
• 阅读 1410

lower_bound&upper_bound - 二分查找函数

它们是C++自带的函数,用于在有序的数列里进行查找。注意,一定是有序的
它们使用的是二分查找的方法,时间复杂度为O(logn),效率很高
使用它们要加上算法头文件,当然,可以使用万能头文件也可以

#include<algorithm> // 算法头文件 
#include<bits/stdc++.h> //万能头文件 

先了解一下它们的区别

lower_bound - 数列递增序时查找大于等于查找数的第一个数,递减则查找小于等于查找数的第一个数

upper_bound - 数列递增序时查找严格大于查找数的第一个数,递减则严格小于等于查找数的第一个数

再看下使用格式

可以看出两者使用格式基本相同

lower_bound(begin, end, num);
upper_bound(begin, end, num);

但是它们的返回值是指针或迭代器,我们要想获取下标还要再减去首地址,知道了下标也就可以获得具体指了

举几个例子便于理解

数组内使用:

int a[5] = {1, 2, 3, 4, 5}; 
int p = lower_bound(a, a+5, 3)-a; //p=2
int num = a[p]; //num=3

vector内使用

vector<int> v;
for(int i=1; i<=5; i++)
    v.push_back(i); 
int p = lower_bound(v.begin(), v.end(), 3)-v.begin(); //p=2
int num = v[p]; //num=3

补充说明

在递减序数列中使用中要加上"greater<type>()"

lower_bound(begin, end, num, reater<type>());
upper_bound(begin, end, num, reater<type>());

如有疑问欢迎在下方评论区提出

点赞
收藏
评论区
推荐文章
林末 林末
4年前
折半查找-Python版(二分查找)
介绍二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。前提必须待查找的序列有序时间复杂度O(log2n)原理1)确定该期间的中间位置K2)将查找的值t与arrayk比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分
Wesley13 Wesley13
3年前
java 二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法。将数列按有序(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。它可以明显减少比较次数,提高查找效率。但是,表中的数据元素必
九路 九路
4年前
7 二分搜索树的原理与Java源码实现
1折半查找法了解二叉查找树之前,先来看看折半查找法,也叫二分查找法在一个有序的整数数组中(假如是从小到大排序的),如果查找某个元素,返回元素的索引。如下:intarrnewint{1,3,4,6,8,9};在arr数组中查找6这个元素,查到返回对应的索引,没有找到就返回1思想很简单:1先找到数组中间元素ta
九路 九路
4年前
二分查找法的递归和非递归的实现
//二分查找法非递归实现,在一个有序的数组中查找e元素的位置,找不到返回1publicstaticintbinarySearch(intdata,inte){intl0;intrdata.length1;while(l<r){
Stella981 Stella981
3年前
Rust FFI 编程
当我们拥有一组具有良好声明的头文件时,自己定义C库的RustFFI绑定函数是毫无意义的。我们可以使用 bindgen 这种工具从C库的头文件生成RustFFI绑定函数。然后,我们运行一些测试代码以验证其是否正常运行,并对它们进行调整,直到正确为止。本文我们将通过一个示例,讨论如何使用 bindgen 将C库中的函数
Stella981 Stella981
3年前
Python数据结构与算法——散列(Hash)
!(https://oscimg.oschina.net/oscnet/19a7428dd9c64d149aa474d3aabe80ce.png)点击上方“蓝字”关注我们散列(Hash)对于一组数据项,顺序查找的时间复杂度是O(n),二分查找是O(logn),而对于散列的数据结构,
Stella981 Stella981
3年前
Git如何帮你查原因
不久前,一位同事为Git的出错,感到烦恼,查找问题的方式非常原始,对于乐于敲命令行的我来说,这哪是一个程序员的所作所为呢!接下来就来说说,怎么高效的查找Git提交出现代码问题的原因。使用【Bisect命令】,是不是很陌生呢。其还是很强大的,先来说一下原理吧!其基于二分查找算法,大概是这样的:如果你想在有n个元素的序列(有序的)中查找元素x,你挑出第
Wesley13 Wesley13
3年前
Java实现的二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法。折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,
Stella981 Stella981
3年前
Kafka中改进的二分查找算法
最近有学习些Kafak的源码,想给大家分享下Kafak中改进的二分查找算法。二分查找,是每个程序员都应掌握的基础算法,而Kafka是如何改进二分查找来应用于自己的场景中,这很值得我们了解学习。由于Kafak把二分查找应用于索引查找的场景中,所以本文会先对Kafka的日志结构和索引进行简单的介绍。在Kafak中,消息以日志的形式保存,每个日志其实就是一个文
Wesley13 Wesley13
3年前
C#二分查找算法设计实现
C二分查找算法设计实现1.介绍二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。(记住了前提要求是顺序存储结构,而且要有序排序,所以说对于一个无序的是没法用二分查找的)2.查找算法过程
小万哥 小万哥
1年前
SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示
SQLMIN()和MAX()函数SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别。以下是它们的用法和示例:MIN()函数MIN()函数返回所选列的最小值。示例:查找Products表中的最低价格:sqlSELECTMIN(Pri