二分法在对有序序列的处理上可以达到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;elsereturn 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;elsereturn -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的下标以防这是最后一个}}}/* 循环结束有两种可能 1. break跳出,此时left==right     2. left==right3. left>right,发生在所有元素都大于n的情况,此时left==0 && right==-1
*/if(nums[left] < n)return left;elsereturn -1;
}

C++学习笔记-----二分法之寻找非减序列第一个大于某个值的数或最后一个小于某个值的数相关推荐

  1. Python学习笔记D4(字符串和序列)

    Python学习笔记D4(字符串和序列) 序列 list()作为一个方法存在两个形态,一个有参数一个没参数 list():不带参数,返回一个空的列表 list([iterable]):返回一个迭代器 ...

  2. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序

    Windows驱动开发学习笔记(一)-- 环境配置&第一个驱动程序 环境配置 第一个驱动程序 环境配置 安装VS2010:https://pan.baidu.com/s/1uZWWxCtB60 ...

  3. 深度学习笔记 第五门课 序列模型 第三周 序列模型和注意力机制

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  4. 深度学习笔记 第五门课 序列模型 第二周 自然语言处理与词嵌入

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  5. 深度学习笔记 第五门课 序列模型 第一周 循环序列模型

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  6. 【学习笔记】山东大学生物信息学-02 序列比较

    课程地址:山东大学生物信息学 文章目录 二.序列比较 2.1 认识序列 2.2 序列相似性 2.3 替换记分矩阵 2.4 序列两两比较:打点法 2.5 序列两两比较:序列比对法(定量) 2.6 一致性 ...

  7. 【学习笔记】生物信息学基础知识+序列比对初步了解(一)

    文章目录 DNA和RNA的组成 基 因 蛋白质 中心法则 DNA的复制 DNA到mRNA转录 蛋白质的剪接 蛋白质的折叠 突变与多态性 组 学 转录组 蛋白质组 代谢组 组学数据简介 表观遗传 复杂生 ...

  8. ​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  9. OpenGL 学习笔记 II:初始化 API,第一个黑窗,游戏循环和帧率,OpenGL 默认垂直同步,glfw 帧率

    前情提要: 上一篇: OpenGL 学习笔记 I:OpenGL glew glad glfw glut 的关系,OpenGL 状态机,现代操作系统的窗口管理器,OpenGL 窗口和上下文 OpenGL ...

最新文章

  1. 王者荣耀s22服务器未响应是什么意思,王者荣耀s22资源包升级失败 s22解析包出现问题解决方法...
  2. 实验3 linux内存映射,3Linux内存映射,mmap()函数
  3. ajax实现文件上传,多文件上传,追加参数
  4. 在InternetExplorer.Application中显示本地图片
  5. 四款855旗舰对比:除开价格,各有优点
  6. asp.net实现bt和pt—tracker request
  7. [OpenCV学习笔记3][图像的加载+修改+显示+保存]
  8. 【剑指offer】数组中的逆序对
  9. 张亚勤称云计算进入2.0时代,百度首推端云一体化芯片,开放110+AI能力
  10. 动词变名词的变化规则_英语单词词性转换规则大全
  11. MindManager 2020下载与使用
  12. android壁纸软件代码,android高清壁纸APP完整源码HD Wallpaper(服务端+客户端)
  13. ubuntu系统文件清理
  14. git prune 相关
  15. 我也写点八卦系文章:从李彦宏八卦说起
  16. 维特比算法的通俗案例解释
  17. win+python实现离线语音识别
  18. 线性代数(3):矩阵
  19. pandas文件读取与存储
  20. 制作HTML编辑器,网站文章编辑器,在线word编辑器

热门文章

  1. Java黑皮书课后题第3章:3.10(游戏:加法测试)程序清单3-3随机产生一个减法问题。修改这个程序,随机产生一个计算两个小于100的整数的加法问题
  2. class转java_java动态代理实现与原理详细分析
  3. ?类型 ,?类型(值)
  4. mock平台架构及实现
  5. MFC VS2005 添加Override 和 Message
  6. Xcode 卸载方法
  7. System.Web.HttpException: The file ~/xxx//Index.cshtml cannot be requested directly because it cal
  8. Oracle 中重新编译无效的存储过程, 或函数、触发器等对象(转)
  9. [网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含缺陷复现及防御措施(CVE-2018-12613)
  10. iOS开发之打电话,发短信,发送邮件