返回

挑战 LeetCode 二分查找:循序渐进的算法入门指南

前端

踏入计算机科学的殿堂,二分查找算法无疑是初学者必经的一道门槛。它的巧妙与高效令人惊叹,在浩瀚的数据中寻宝,二分查找犹如一把利刃,直指目标,所向披靡。

二分查找的精髓

二分查找的原理并不复杂,其核心在于分而治之。面对海量数据,它将数据一分为二,不断缩小搜索范围,直至找到目标元素或确定其不存在。

算法步骤清晰明了:

  1. 初始化 :设定搜索区间为 [left, right]。
  2. 计算中点 :计算区间中点 mid = (left + right) / 2。
  3. 比较中点 :将 mid 与目标元素 target 进行比较。
  4. 调整区间
    • 如果 mid == target,则返回 mid。
    • 如果 mid > target,则将 right 更新为 mid - 1。
    • 如果 mid < target,则将 left 更新为 mid + 1。
  5. 循环 :重复步骤 2-4,直至 left > right。
  6. 返回 -1 :表示未找到目标元素。

LeetCode 题解:02 二分查找

题目

给定一个有序数组 nums 和一个目标值 target,请找出该目标值在数组中的索引。如果目标值不存在,返回 -1。

输入:

nums = [-1,0,3,5,9,12]
target = 9

输出:

4

思路分析:

本题正是二分查找的典型应用场景。我们从给定数组的第一个和最后一个元素开始,不断缩小搜索范围。如果当前中点与目标值相等,则返回中点索引;否则,如果中点大于目标值,则将其作为新的右边界;反之,则将其作为新的左边界。

代码示例:

def binary_search(nums, target):
  left, right = 0, len(nums) - 1

  while left <= right:
    mid = (left + right) // 2
    if nums[mid] == target:
      return mid
    elif nums[mid] > target:
      right = mid - 1
    else:
      left = mid + 1

  return -1

深入探索:二分查找的应用

二分查找的适用场景远不止于此。它在众多计算机科学领域中扮演着至关重要的角色:

  • 查找最小值和最大值
  • 寻找最接近的目标值
  • 判断元素是否存在
  • 区间合并

它的优势在于速度快、效率高,成为解决有序数据查询问题的首选算法。

结语

二分查找算法,看似简单,却蕴藏着巨大的力量。它不仅是算法学习的入门基础,更是实战中不可或缺的利器。掌握它,将为你的计算机科学之旅增添无限可能。