返回题库算法与数据结构刷题二分查找 · 第 2 / 3 篇

算法选择题:二分查找(5 题)

031 二分查找能够成立的必要条件是什么?

难度: 基础

  • A. 任何整数答案都可以直接二分
  • B. 二分查找要求数组必须无序,否则结果不唯一
  • C. 二分只适用于数组,不适用于答案值域搜索
  • D. 判定结果在搜索空间中必须单调,方向只变化一次;搜索空间不一定是数组,但必须能证明单调阈值
查看答案与解析

正确答案D

正确原因: 二分要求判定结果在搜索空间中只发生一次方向变化;搜索空间不一定是数组,但必须能证明单调阈值。

错误选项辨析: A 项:答案可二分的前提是判定结果单调,否则无法确定移动方向;B 项:二分恰恰要求有序或单调的判定,无序无法二分;C 项:对答案空间二分是常见技巧,搜索空间不一定是有序数组。

032 在闭区间 [left,right] 上做二分查找,哪种写法表述准确?

难度: 进阶

给定代码:

int left = 0, right = a.Length - 1;
while (left <= right)
{
    int mid = left + (right - left) / 2;
    if (a[mid] < target) left = mid + 1;
    else if (a[mid] > target) right = mid - 1;
    else return mid;
}
return -1;
  • A. 闭区间下循环条件应为 left <= right;检查 mid 后必须用 mid+1 或 mid-1 排除 mid,否则可能死循环
  • B. mid 必须写成 (left + right) / 2 才能保证正确
  • C. 循环条件应写成 left < right,且更新时保留 mid
  • D. 闭区间下 right 应初始化为 a.Length,才能覆盖最后一个元素
查看答案与解析

正确答案A

正确原因: 区间 [left,right] 非空条件是 left <= right;检查 mid 后必须用 mid-1 或 mid+1 排除它。

错误选项辨析: B 项:left + (right-left)/2 同样正确,且能避免相加溢出;C 项:与闭区间语义矛盾,保留 mid 会导致无法排除已检查位置;D 项:闭区间包含 right,初始化为 Length 会越界访问。

033 在半开区间 [left,right) 上做二分查找,哪种表述准确?

难度: 进阶

  • A. 闭区间与半开区间的更新规则可以任意混用
  • B. 半开区间的循环条件必须写成 left <= right
  • C. right 可初始化为 Length;循环条件为 left < right;更新必须始终保持右端不包含语义,即 right=mid、left=mid+1
  • D. 半开区间下 right 必须初始化为 Length-1
查看答案与解析

正确答案C

正确原因: 区间 [left,right) 可把 right 初始化为 Length;循环和更新必须始终保持右端不包含语义。

错误选项辨析: A 项:混用会破坏区间语义,导致漏查或死循环;B 项:半开区间空条件为 left == right,写成 <= 会越界;D 项:半开区间不包含右端,初始化为 Length 才能覆盖全部元素。

034 计算二分中点时,为什么常用 left + (right - left) / 2?

难度: 进阶

  • A. 避免 left + right 直接相加溢出;下标与答案范围仍需选择足够宽的整数类型
  • B. (left + right) / 2 在所有范围都安全,无需改写
  • C. 只要用 long 保存 mid,就一定能避免所有溢出问题
  • D. left + (right - left) / 2 只有在 left 为负数时才有效
查看答案与解析

正确答案A

正确原因: 使用 left + (right-left)/2 避免直接相加溢出;下标与答案范围仍需选择足够宽的整数类型。

错误选项辨析: B 项:left+right 可能超过 int 上限,直接相加会溢出;C 项:若 left+right 先以 int 计算,赋值 long 前已经溢出;D 项:该写法对任意 left、right 都成立,与正负无关。

035 在有序数组中查找第一个 >= target 的位置,哪种表述准确?

难度: 综合

  • A. 下界一定返回 target 的首次出现位置,找不到 target 就返回 -1
  • B. 下界(lower bound)返回第一个 >= target 的位置,上界(upper bound)返回第一个 > target 的位置;不存在符合位置时都可能返回 Length
  • C. 上下界都等价于查找任意一个 target 的位置
  • D. 下界只在数组包含 target 时才有意义,否则结果恒为 0
查看答案与解析

正确答案B

正确原因: 下界找第一个 >= target,上界找第一个 > target;不存在符合位置时二者都可能返回 Length。

错误选项辨析: A 项:下界在 target 不存在时返回第一个大于它的位置,而不是 -1;C 项:下界找边界位置而非任意命中,没有 target 时仍返回插入点;D 项:target 不存在时下界返回插入点,取决于数组内容而非恒为 0。

当前分类

二分查找

查看全部分类 →
  1. 01算法专题:二分查找
  2. 02算法选择题:二分查找(5 题)5 题
  3. 03算法编程题:二分查找(6 题)6 题
ESC

输入关键词开始搜索