二分查找用于在有序数组中高效查找目标值,时间复杂度O(log n)。核心思想是每次缩小一半搜索区间,需满足数组有序且支持随机访问。标准写法使用闭区间[left, right],循环条件为left target)等函数,可简化实现。面试关键在于明确查找目标(任意位置或边界)、正确处理区间开闭与边界更新,防止死循环。掌握标准写法与两种边界变体,并熟悉STL函数,足以应对大多数面试题。
二分查找是一种在有序数组中快速定位目标值的高效算法,时间复杂度为 O(log n),是 C++ 面试中最常考的基础算法之一。掌握其写法和边界处理技巧至关重要。
二分查找的核心思想是每次将搜索区间缩小一半:
查找目标值 target 的下标,若不存在返回 -1:
int binarySearch(vector& nums, int target) { int left = 0; int right = nums.size() - 1; // 注意:闭区间 while (left zuojiankuohaophpcn= right) { int mid = left + (right - left) / 2; // 防止溢出 if (nums[mid] == target) { return mid; } else if (nums[mid] zuojiankuohaophpcn target) { left = mid + 1; } else { right = mid - 1; } } return -1;}
当存在重复元素时,查找第一个等于 target 的位置:
int leftBound(vector& nums, int target) { int left = 0; int right = nums.size() - 1; int result = -1; while (left zuojiankuohaophpcn= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { result = mid; right = mid - 1; // 继续向左找 } else if (nums[mid] zuojiankuohaophpcn target) { left = mid + 1; } else { right = mid - 1; } } return result;}
查找最后一个等于 target 的位置:
int rightBound(vector& nums, int target) { int left = 0; int right = nums.size() - 1; int result = -1; while (left zuojiankuohaophpcn= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { result = mid; left = mid + 1; // 继续向右找 } else if (nums[mid] zuojiankuohaophpcn target) { left = mid + 1; } else { right = mid - 1; } } return result;
}
C++ 标准库提供了几个高效的二分查找函数,面试中可简要提及:
例如:
vectornums = {1, 2, 2, 2, 3, 4}; auto it = lower_bound(nums.begin(), nums.end(), 2); int index = it - nums.begin(); // 返回 1
写二分查找时容易出错的地方:
left 还是 left ,取决于区间开闭
left + (right - left) / 2 避免整数溢出基本上就这些。掌握标准写法和两个边界变体,再熟悉 STL 函数,应对 C++ 面试中的二分查找题就足够了。关键是逻辑清晰,边界处理正确。
# c++
# 标准库
# 循环
# 算法
# 第一个
# 是否存在
# 升序
# 迭代
# 几个
# 开闭
# 是一种
# 两种
# 要找
# 若不
相关文章:
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
广州建站公司哪家好?十大优质服务商推荐
教学网站制作软件,学习*后期制作的网站有哪些?
如何使用Golang table-driven基准测试_多组数据测量函数效率
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
详解jQuery中基本的动画方法
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
简单实现Android文件上传
已有域名和空间如何搭建网站?
建站VPS推荐:2025年高性能服务器配置指南
电商平台网站制作流程,电商网站如何制作?
如何快速建站并高效导出源代码?
Android滚轮选择时间控件使用详解
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何在橙子建站上传落地页?操作指南详解
如何选择服务器才能高效搭建专属网站?
建站之星客服服务时间及联系方式如何?
如何快速生成高效建站系统源代码?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何通过智能用户系统一键生成高效建站方案?
如何用低价快速搭建高质量网站?
如何在IIS中新建站点并配置端口与物理路径?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
,有什么在线背英语单词效率比较高的网站?
如何选择高效响应式自助建站源码系统?
如何快速配置高效服务器建站软件?
建站VPS选购需注意哪些关键参数?
建站之星会员如何解锁更多建站功能?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何在万网自助建站中设置域名及备案?
如何快速生成可下载的建站源码工具?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
建站之星如何快速生成多端适配网站?
制作表格网站有哪些,线上表格怎么弄?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何在橙子建站中快速调整背景颜色?
SQL查询语句优化的实用方法总结
建站主机解析:虚拟主机配置与服务器选择指南
Swift中循环语句中的转移语句 break 和 continue
,石家庄四十八中学官网?
建站之星如何保障用户数据免受黑客入侵?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何在服务器上三步完成建站并提升流量?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
如何通过主机屋免费建站教程十分钟搭建网站?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
简单实现Android验证码
简历在线制作网站免费版,如何创建个人简历?
*请认真填写需求信息,我们会在24小时内与您取得联系。