二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)
二分查找:
//二分查找(迭代实现)
int bsearch(int* array, int low, int high, int index)
{int mid;while (low < high){mid = low + (high - low) / 2;//防止溢出if (array[mid] == index) return mid;//查找成功else if (array[mid] > index) high = mid;else low = mid + 1;}return -1;//查找失败
}
lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
求下界lower_bound:
//求下界,既在单调递增序列array中查找>=index的数中最小的一个(即index或index的后继)
int lower_bound(int* array, int low, int high, int index)
{int mid;while (low < high){mid = low + (high - low) / 2;//防止溢出if (array[mid] >=index) high=mid;else low = mid + 1;}return low;
}
//或者直接使用内置函数lower_bound,方法如下:
#include <algorithm>
#include<vector>
#include <iostream>
using namespace std;
int main()
{//数组int a[] = { 1,2,3,4,5,6,7,8 };cout << lower_bound(a, a + 8, 2) - a<<endl;//此时输出下标1,如果没有>=index的,则返回8;
//向量vector<int> v;for(int i=1;i<=8;i++){v.push_back(i);//v={ 1,2,3,4,5,6,7,8 };}cout<<lower_bound(v.begin(), v.end(), 6) - v.begin();//此时输出下标5既为v[5],如果没有>=index的,则返回8;}
求上界upper_bound:
//求上界,求index出现的最后一个位置的后面的一个位置(这里没有等于);
//如果不存在,返回下标i:既在i处插入index元素后仍然有序。
int upper_bound(int* array, int low, int high, int index)
{int mid;while (low < high){mid = low + (high - low) / 2;//防止溢出if (array[mid] <= index) low = mid + 1;else high = mid;}return low;
}
//或者直接使用内置函数upper_bound,方法如下:
#include <algorithm>
#include<vector>
#include <iostream>
using namespace std;
int main()
{//数组int a[] = { 1,2,3,4,5,6,7,8 };cout << upper_bound(a, a + 7, 6) - a << endl;//返回下标6
//向量vector<int> v;for (int i = 1; i <= 8; i++){v.push_back(i);//v={ 1,2,3,4,5,6,7,8 };}cout << upper_bound(v.begin(), v.end(), 6) - v.begin();//此时输出下标6}
最后,如果有点混淆,看看下面这张图:
二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)相关推荐
- 二分查找求上界和下界
二分查找求上界和下界 假设序列有序,其区间为[left,right)[left, right),设middlemiddle为区间中间值,现在需要获得首个出现元素vv的位置,如果不存在,返回一个位置,在 ...
- Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)
文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...
- 二分查找(上界,下界)
// 普通二分查找 int bsearch(int *A, int l, int r, int val){ // [l, r)while(l < r){int mid = l + (r - l) ...
- Python 循环语句和字符串内置函数
系列文章目录 第五章 Python 机器学习入门之循环语句与字符串内置函数 Python 机器学习入门之循环语句 系列文章目录 前言 一.while 二.while嵌套循环 三.掷骰子 四.break ...
- hive内置函数_flink教程flink modules详解之使用hive函数
modules概念 通过hive module使用hive函数 内置函数 自定义函数 sql 客户端的使用 原理分析和源码解析 实现 modules概念 flink 提供了一个module的概念,使用 ...
- Python学习(14)--内置函数
Python学习(14)--内置函数 1.Python内置函数 在Python中有很多的内置函数供我们调用,熟练的使用这些内置函数可以让编写代码时事半功倍,所谓内置函数就是那些Python已经预定义并 ...
- MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总)
MATLAB 求函数极值的内置函数一览表 收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅. 文章目录 MATLAB 求函数极值的内置函数一览表 简介 概览 求函数极值(或最大值最小 ...
- python求最小值不能使用min和sotred_python基础——内置函数
python基础--内置函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...
- python中求包含5的数_Python 内置函数 ( ) 可以返回列表、元组、字典、集合、字符串以及 range 对象中元素个数。_学小易找答案...
[简答题]实例1:求两数相除的结果. 先后输入2个数据,计算第一个数除以第二个数的结果. 要求能够处理输入数据为非数字.除数为零.文件末尾EndOfFile 和用户使用Ctrl + C 命令终止程序等 ...
最新文章
- ie6 span 换行IE6中float:right换行问题的替代解决方案
- Echart---多项柱状图-2D/H5
- 初识Docker-Docker的安装
- Unable to create '/media/sf_nginx/H2_20151103/H2/.git/index.lock': File exists.
- iOS- 如何改变section header
- Vue的router导航重复-报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to curren
- batch_size,iteration,epoch关系
- zz:测试还是开发?
- Linux RedHat 5.2 构建PostFix邮件服务器
- python车辆型号识别_基于Tensorflow的车辆检测和车型识别
- 如何开发一套完整的医疗远程会诊系统方案
- jsp综合开发实例——夏日九宫格日记网
- PostgreSQL 跨数据库实例之间的数据访问
- 安装语言包-英文(美国)
- 第08课:Retained 消息和 LWT
- abap开发那点事 (二)
- python 的基础 学习第十天函数的初始
- meshgrid()+plt.contourf()用法
- jsp+servlet实现个人博客系统
- Android一键锁屏实现