全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++ 二分查找算法怎么写_C++算法面试高频题解析

二分查找用于在有序数组中高效查找目标值,时间复杂度O(log n)。核心思想是每次缩小一半搜索区间,需满足数组有序且支持随机访问。标准写法使用闭区间[left, right],循环条件为left target)等函数,可简化实现。面试关键在于明确查找目标(任意位置或边界)、正确处理区间开闭与边界更新,防止死循环。掌握标准写法与两种边界变体,并熟悉STL函数,足以应对大多数面试题。

二分查找是一种在有序数组中快速定位目标值的高效算法,时间复杂度为 O(log n),是 C++ 面试中最常考的基础算法之一。掌握其写法和边界处理技巧至关重要。

基本思路与适用条件

二分查找的核心思想是每次将搜索区间缩小一半:

  • 数组必须是已排序的(默认升序)
  • 支持随机访问(数组或 vector)
  • 查找某个值是否存在、位置,或满足某种条件的边界

标准二分查找写法

查找目标值 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;

}

STL 中的二分查找函数

C++ 标准库提供了几个高效的二分查找函数,面试中可简要提及:

  • std::binary_search:判断元素是否存在
  • std::lower_bound:返回第一个 ≥ target 的迭代器
  • std::upper_bound:返回第一个 > target 的迭代器

例如:

vector nums = {1, 2, 2, 2, 3, 4};
auto it = lower_bound(nums.begin(), nums.end(), 2);
int index = it - nums.begin(); // 返回 1

面试注意事项

写二分查找时容易出错的地方:

  • 循环条件是 left 还是 left ,取决于区间开闭
  • mid 计算用 left + (right - left) / 2 避免整数溢出
  • 更新 left 和 right 时是否漏掉 ±1,防止死循环
  • 明确题目是要找“任意位置”还是“边界位置”

基本上就这些。掌握标准写法和两个边界变体,再熟悉 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小时内与您取得联系。