博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lower_bound和upper_bound算法实现
阅读量:5362 次
发布时间:2019-06-15

本文共 1172 字,大约阅读时间需要 3 分钟。

  lower_bound算法要求在已经按照非递减顺序排序的数组中找到第一个大于等于给定值key的那个数,其基本实现原理是二分查找,如下所示:

int lower_bound(vector
arr, int key) { int half; int len = arr.size(); int mid; int first = 0; while (len > 0) { half = len >> 1; mid = first + half; //in the right part if (arr[mid] < key) { first = mid + 1; //因为first=mid+1,所以这里的len需要在减去half的基础之上再减去1 len = len - half - 1; } else { //in the left part len = half; } } return first;}

  upper_bound函数要求在按照非递减顺序排好序的数组中找到第一个大于给定值key的那个数,其基本实现原理是二分查找,具体实现如下所示:

int upper_bound(vector
arr, int key) { int mid; int first = 0; int len = arr.size(); int half; while (len > 0) { half = len >> 1; mid = half + first; if (arr[mid] > key) {
//in the left part len = half; } else {
//if arr[mid]<= key ,in the right part first = mid + 1; len = len - half - 1; } } return first;}

  上述两种实现参考了stl中的实现方式,返回满足条件的值在数组中的下标。如果找不到满足条件的值,将会返回数组的大小,就像迭代器中的end一样,对应有效下标的下一个值。

转载于:https://www.cnblogs.com/zhoudayang/p/5679066.html

你可能感兴趣的文章
第二轮冲刺第五天
查看>>
图片压缩
查看>>
Hadoop-2.6.5安装
查看>>
教你如何一步步将项目部署到Github
查看>>
关于Android圆形图片的一种优化方案(可以显示网络图片)
查看>>
Oracle开发:dba和sysdba的区别
查看>>
Spring常用注解
查看>>
latch release ......
查看>>
String 字符串详解 / 常用API
查看>>
懒加载树[tree]、点击已经加载完成的树[tree]节点,再次加载该节点下一级的所有子节点...
查看>>
[LeetCode]Unique Binary Search Trees
查看>>
CURL
查看>>
让python输出不自行换行的方法
查看>>
用servlet进行用户名和密码校验
查看>>
scala中伴生对象和伴生类
查看>>
格式布局小结
查看>>
plsql 存储过程 测试
查看>>
软件工程实践总结作业——个人作业
查看>>
NiftyNet 项目了解
查看>>
性能优化与使用Block实现数据回传(3)
查看>>