二分搜索:lower_bound, upper_bound
来源:互联网 发布:linux修改系统日期 编辑:程序博客网 时间:2024/04/30 04:26
#include <iostream> #include <cstdio> using namespace std; const int MAX_N = 100; int N, M; int a[MAX_N] = {2, 3, 3, 5, 6};int lower_bound(int a[], int n, int key){int l = 0, r = n;while(r > l){int mid = (l+r) /2;if(a[mid] < key)l = mid+1;//查找右边区域:[mid+1, r]elser = mid;//查找左边区域:[l, mid]}return r;}int upper_bound(int a[], int n, int key){int l = 0, r = n;while(r > l){int mid = (l+r) /2;if(a[mid] <= key)l = mid+1;elser = mid;}return r ;}int main() { //freopen("in.txt", "r", stdin); N = 5;int key;for(int i = 0; i < N; i++)printf(i == N-1 ? "%d\n" : "%d ", a[i]);while(scanf("%d", &key) != EOF){int low = lower_bound(a, N, key);int up = upper_bound(a, N, key);printf("low: %d, up: %d\n", low, up);}return 0; }
int lower_bound1(int a[], int n, int key) { int l = -1, r = n; while(r > l + 1) { int mid = (l+r) /2; if(a[mid] >= key) r = mid; //查找左边区域:(l, mid] else l = mid;//查找右边区域:(mid, r]} return r; } int upper_bound1(int a[], int n, int key) { int l = -1, r = n; while(r > l + 1) { int mid = (l+r) /2; if(a[mid] > key) r = mid; //查找左边区域:(l, mid] else l = mid;//查找右边区域:(mid, r]} return r; }
数据测试:
2 3 3 5 6
0
low: 0, up: 0
1
low: 0, up: 0
2
low: 0, up: 1
3
low: 1, up: 3
4
low: 3, up: 3
5
low: 3, up: 4
6
low: 4, up: 5
7
low: 5, up: 5
0 0
- 二分搜索:lower_bound, upper_bound
- upper_bound,lower_bound,eaual_bound,equal_range二分搜索
- 关于二分(upper_bound,lower_bound)
- 二分查找,lower_bound,upper_bound
- 二分 lower_bound,upper_bound
- 【lower_bound】【upper_bound】二分查找
- 二分查找和lower_bound & upper_bound
- 二分--lower_bound()函数,upper_bound()函数
- Leetcode 34 Search for a Range (二分搜索 lower_bound和upper_bound)
- 二分查找及lower_bound与upper_bound
- 二分查找—lower_bound 、upper_bound 、binary_search
- 二分lower_bound()与upper_bound()的运用
- STL中的二分查找--lower_bound/upper_bound/binary_search
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- C中的二分函数:upper_bound()与lower_bound()
- STL中的二分查找,lower_bound();与upper_bound();
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- Mysql、SqlServer和Oracle 添加修改删除字段sql
- MiniProfiler 网站性能测试工具使用
- 中国移动“逆天”套餐-香港3g-LTE套餐 之拙见
- 达内科技IPO首日微涨0.67%
- 大数据时代下的SQL Server第三方负载均衡方案 ----Moebius测试
- 二分搜索:lower_bound, upper_bound
- jaxb Element下怎么设置多个同名的子Element
- 笔记10--遇到的错误
- 海力士camera
- POJ 1001 & UVa 748 - Exponentiation in JAVA
- Java中反射性能测试
- Spring + iBatis 的多库横向切分简易解决思路
- 守护进程
- Andriod 存储数据方式 之 SharedPreferences