二分查找算法(Binary Search)
字数 866 2025-10-25 22:15:07

二分查找算法(Binary Search)

题目描述:给定一个升序排列的整数数组 nums 和一个目标值 target,请你找出 target 在数组中的索引位置。如果目标值不存在于数组中,返回 -1。要求算法时间复杂度为 O(log n)。

解题过程:

  1. 核心思想
    二分查找利用数组已排序的特性,通过不断缩小搜索范围来快速定位目标值。每次比较中间元素与目标值,根据比较结果决定继续搜索左半部分或右半部分。

  2. 具体步骤
    步骤1:初始化两个指针

  • 左指针 left = 0(指向数组起始位置)
  • 右指针 right = nums.length - 1(指向数组末尾位置)

步骤2:循环查找(当 left ≤ right 时)
a. 计算中间位置 mid = left + (right - left) // 2
(使用这种写法而非 (left+right)//2 可防止整数溢出)

b. 比较中间值与目标值:

  • 如果 nums[mid] == target:找到目标,直接返回 mid
  • 如果 nums[mid] < target:说明目标在右侧,将 left 设为 mid + 1
  • 如果 nums[mid] > target:说明目标在左侧,将 right 设为 mid - 1

步骤3:循环结束处理
如果循环结束仍未找到目标值,说明目标不存在,返回 -1

  1. 执行示例
    以 nums = [1, 3, 5, 7, 9], target = 7 为例:
    第一次查找:left=0, right=4 → mid=2 → nums[2]=5 < 7 → left=3
    第二次查找:left=3, right=4 → mid=3 → nums[3]=7 == 7 → 返回索引3

  2. 关键要点

  • 必须确保输入数组是有序的
  • 每次比较可排除一半的搜索空间
  • 时间复杂度为 O(log n),空间复杂度为 O(1)
  1. 边界情况处理
  • 空数组:直接返回 -1
  • 单个元素数组:直接比较该元素
  • 目标值小于最小值或大于最大值:可通过首尾判断快速确定不存在
二分查找算法(Binary Search) 题目描述:给定一个升序排列的整数数组 nums 和一个目标值 target,请你找出 target 在数组中的索引位置。如果目标值不存在于数组中,返回 -1。要求算法时间复杂度为 O(log n)。 解题过程: 核心思想 二分查找利用数组已排序的特性,通过不断缩小搜索范围来快速定位目标值。每次比较中间元素与目标值,根据比较结果决定继续搜索左半部分或右半部分。 具体步骤 步骤1:初始化两个指针 左指针 left = 0(指向数组起始位置) 右指针 right = nums.length - 1(指向数组末尾位置) 步骤2:循环查找(当 left ≤ right 时) a. 计算中间位置 mid = left + (right - left) // 2 (使用这种写法而非 (left+right)//2 可防止整数溢出) b. 比较中间值与目标值: 如果 nums[ mid ] == target:找到目标,直接返回 mid 如果 nums[ mid] < target:说明目标在右侧,将 left 设为 mid + 1 如果 nums[ mid ] > target:说明目标在左侧,将 right 设为 mid - 1 步骤3:循环结束处理 如果循环结束仍未找到目标值,说明目标不存在,返回 -1 执行示例 以 nums = [ 1, 3, 5, 7, 9 ], target = 7 为例: 第一次查找:left=0, right=4 → mid=2 → nums[ 2]=5 < 7 → left=3 第二次查找:left=3, right=4 → mid=3 → nums[ 3 ]=7 == 7 → 返回索引3 关键要点 必须确保输入数组是有序的 每次比较可排除一半的搜索空间 时间复杂度为 O(log n),空间复杂度为 O(1) 边界情况处理 空数组:直接返回 -1 单个元素数组:直接比较该元素 目标值小于最小值或大于最大值:可通过首尾判断快速确定不存在