当前位置: 首页 > news >正文

C++ 二分查找法【面试】

在C++中实现二分查找法是一个常见的面试问题。二分查找法是一种在有序数组中查找特定元素的算法,其时间复杂度为O(log n)。以下是使用C++实现二分查找的示例代码:

#include <iostream>
#include <vector>// 二分查找法函数
int binarySearch(const std::vector<int>& nums, int target) {int left = 0; // 定义左边界int right = nums.size() - 1; // 定义右边界while (left <= right) {int mid = left + (right - left) / 2; // 计算中间位置,防止溢出if (nums[mid] == target) {// 找到目标值,返回索引return mid;} else if (nums[mid] < target) {// 如果目标值大于中间值,更新左边界left = mid + 1;} else {// 如果目标值小于中间值,更新右边界right = mid - 1;}}// 未找到目标值,返回-1return -1;
}int main() {std::vector<int> nums = {-3, 10, 11, 21, 34, 54, 60, 78};int target = 21;int result = binarySearch(nums, target);if (result != -1) {std::cout << "Element found at index " << result << std::endl;} else {std::cout << "Element not found in the array." << std::endl;}return 0;
}

面试要点

  1. 算法逻辑:解释二分查找的基本原理,包括如何确定中间位置,以及如何根据中间值与目标值的比较结果更新搜索范围。

  2. 数组要求:强调二分查找法要求数组是有序的。

  3. 时间复杂度:讨论二分查找的时间复杂度为O(log n),其中n是数组的大小。

  4. 防止溢出:在计算中间索引时使用left + (right - left) / 2来防止整数溢出。

  5. 边界条件:说明循环条件是while (left <= right),这保证了即使数组中只有一个元素,算法也能正确处理。

  6. 返回值:讨论函数的返回值,即找到目标时返回索引,未找到时返回-1。

面试回答示例
"二分查找是一种高效的搜索算法,适用于有序数组。它的基本思想是将目标值与数组中间的元素进行比较。如果目标值等于中间元素,搜索成功;如果目标值小于中间元素,搜索范围缩小至数组的左半部分;如果目标值大于中间元素,搜索范围缩小至数组的右半部分。这个过程将重复,直到找到目标值或搜索范围为空。为了防止整数溢出,我们使用left + (right - left) / 2来计算中间索引。如果数组中有重复元素,二分查找将返回任意一个匹配的索引。"

http://www.lryc.cn/news/374344.html

相关文章:

  • 【Docker】docker-compose常用的构建docker容器的yml文件
  • 华为坤灵路由器初始化开局的注意事项,含NAT配置
  • HTTP!!!
  • Mybatis用Map接收返回值可能出现的问题
  • Web爬虫--fofa-资产信息搜集
  • mySql的事务(操作一下)
  • UniApp或微信小程序中scroll-view组件使用show-scrollbar在真机Android或IOS中隐藏不了滚动条的解决办法
  • 每天五分钟深度学习框架pytorch:多维tensor向量在某一维度的拼接和分割
  • 从C语言到C++(五)
  • 数据结构——栈(Stack)详解
  • 1.Element的table表高度自适应vue3+js写法
  • 联想电脑电池只能充到80%,就不在充电了,猛一看以为坏了,只是设置了养护模式。
  • Unity接入PS5手柄和Xbox手柄以及Android平台的(以及不同平台分析)
  • vue+java实现简易AI问答组件(基于百度文心大模型)
  • 刷代码随想有感(104):动态规划——01背包问题/二维dp数组
  • Docker-Portainer可视化管理工具
  • SqlSugar 集成
  • MySQL Connector/C++ 和 MySQL Connector/ODBC 的区别
  • Weevil-Optimizer象鼻虫优化算法的matlab仿真实现
  • Web前端项目-交互式3D魔方【附源码】
  • 视频格式转换avi格式怎么弄?分享视频转换方法
  • UniRx 入门
  • 简单游戏制作——飞行棋
  • 等保一体机
  • 什么是寄存器文件(Register File)?
  • 6月15号作业
  • 零基础入门学用Arduino 第三部分(三)
  • Trusty qemu + android环境搭建详细步骤
  • 杀戮尖塔游戏
  • Kubernetes (K8s) 和 Spring Cloud 的区别