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;
        }
    }

    // 未找到目标值,返回-1
    return -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来计算中间索引。如果数组中有重复元素,二分查找将返回任意一个匹配的索引。"

相关推荐

  1. C++ 二分查找面试

    2024-06-17 08:48:03       7 阅读
  2. 【算法-数组】二分查找

    2024-06-17 08:48:03       29 阅读
  3. c++】二分查找教程

    2024-06-17 08:48:03       37 阅读
  4. C++二分查找

    2024-06-17 08:48:03       36 阅读
  5. C语言-二分查找

    2024-06-17 08:48:03       24 阅读
  6. C# 二分查找

    2024-06-17 08:48:03       27 阅读
  7. [C语言]二分查找

    2024-06-17 08:48:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-17 08:48:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-17 08:48:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-17 08:48:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-17 08:48:03       18 阅读

热门阅读

  1. 1、C++编程中的基本运算 - 课件

    2024-06-17 08:48:03       7 阅读
  2. SpringSecurity(JWT、SecurityConfig、Redis)

    2024-06-17 08:48:03       6 阅读
  3. API 类别 - 特效核心

    2024-06-17 08:48:03       5 阅读
  4. Linux 基础IO 三

    2024-06-17 08:48:03       6 阅读
  5. 你应该知道的口语连读技巧

    2024-06-17 08:48:03       6 阅读
  6. Rust创建基准测试bench

    2024-06-17 08:48:03       6 阅读
  7. AWS无服务器 应用程序开发—第十三章 小结2

    2024-06-17 08:48:03       5 阅读
  8. 迁移学习和从头训练(from scratch)的区别

    2024-06-17 08:48:03       6 阅读
  9. Conda编译

    2024-06-17 08:48:03       8 阅读
  10. Linux 常用命令 - userdel 【删除用户】

    2024-06-17 08:48:03       7 阅读
  11. SQL COUNT() 函数深入解析

    2024-06-17 08:48:03       5 阅读