C++学习笔记-----二分法之寻找非减序列第一个大于某个值的数或最后一个小于某个值的数
来源:互联网 发布:wkwebview的优化 编辑:程序博客网 时间:2024/05/21 17:07
二分法在对有序序列的处理上可以达到O(lg(n))的时间复杂度,通常用在二分查找上。
此时有一个有序序列,给定一个数n,n可以在这个序列中也可以不在,要求找到第一个大于n的数和第一个小于n的数。
实际上,只需要在二分法的基础上稍加改动即可达到需求
二分查找n的下标
int binaryFind(vector<int>& nums, int n){ int left = 0; int right = nums.size() - 1; while(left < right) { int middle = (left + right) / 2; if(nums[middle] > n) right = middle - 1; else if(nums[middle] < n) left = middle + 1; else return middle; } return left;}
二分查找寻找第一个大于n的数的下标
int binaryFindFirstMoreNum(vector<int>& nums, int n){ int left = 0; int right = nums.size() - 1; while(left < right) { int middle = (left + right) / 2; if(nums[middle] > n) right = middle; //保留大于n的下标以防这是第一个 else if(nums[middle] <= n) //将小于改为小于等于 left = middle + 1; } if(nums[left] > n) return left; else return -1;}
二分查找最后一个小于n的数的下标
int binaryFindLastLessNum(vector<int>& nums, int n){ int left = 0; int right = nums.size() - 1; while (left < right) { int middle = (left + right) / 2; if (nums[middle] >= n) //将大于改为大于等于 right = middle - 1; else if (nums[middle] < n) { //避免无限循环 if (left == middle) { if (nums[right] < n) left = right; break; } else { left = middle; //保留小于n的下标以防这是最后一个 } } } if(nums[right] < n) return right; else return -1;}
阅读全文
0 0
- C++学习笔记-----二分法之寻找非减序列第一个大于某个值的数或最后一个小于某个值的数
- 求一堆数中取出2个异或使得异或值大于某个数
- 判断小于或等于某个数的所有素数
- CSU 1323 求一堆数中取出2个异或使得异或值大于某个数
- 计算某个文件夹下的所有文件或根据一个或多个后缀名计算文件数或去掉某个或多个后缀名计算文件数
- 二分法搜索某个数
- 寻找两数之和为某个值
- FFT(快速傅立叶变换)求数组中两两之和小于某个数的有多少个
- 输出小于某个数的所有回文素数
- 利用tire tree 寻找是否存在某个数是另外一个数的前缀(Phone List)
- 【c语言】查找某个数后的n个素数
- 二分查找、二分查找小于等于key的最后一个元素、二分查找大于等于key的第一个元素
- 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
- 二分查找最后一个小于等于和第一个大于等于某对象的数组元素位置
- 每天一个算法之寻找第一个只出现一次的数
- sql——查询大于、小于某个日期的写法
- 算法:输入一个十进制数,根据输入的数输出所对应的英文星期单词,若输入的数小于1或大于7,则输出ERROR。
- 【二分查找】为非负数组寻找一个上限cap,使得数组的和为给某个给定的数s
- orcle中sql用到的chr()
- Spring Cloud构建微服务架构:Consul服务注册与发现
- 使用restTemplate调用外部接口
- 背包问题之01背包问题
- java交换角标
- C++学习笔记-----二分法之寻找非减序列第一个大于某个值的数或最后一个小于某个值的数
- O(1)快速乘
- linux中的磁盘加密和磁盘配额
- Python数据分析与展示(6)——Pandas数据特征分析
- javascript 实现多个异步函数的同时执行后再执行回调函数
- JDK JRE JVM 三者之间的关系
- [随心译]2017.8.5-你家毛茸茸的宠物的荤粮正在加速气候变化
- Linux 磁盘分区
- 二分查找