返回

掌握终极二分查找模板,秒杀 LeetCode 难题!

前端

二分查找算法在计算机科学中无处不在,从查找数组中的元素到解决优化问题,都扮演着至关重要的角色。掌握二分查找模板,能让你快速解决一系列 LeetCode 难题,并大幅提升你的算法能力。

本文将深入剖析二分查找的原理,并提供一个通用模板,涵盖所有常见的变体。通过详细的代码示例和 LeetCode 题解,我们将逐一击破二分查找的难关,让你成为算法高手。

二分查找原理

二分查找算法基于一个有序数组。它的核心思想是:将数组均分成两半,如果目标值在左半部分,则舍弃右半部分;如果目标值在右半部分,则舍弃左半部分。如此反复,直到找到目标值或搜索空间耗尽。

终极二分查找模板

以下是最常见的二分查找模板:

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:
            left = mid + 1
        else:
            right = mid - 1

    return -1  # 未找到目标值

模板使用说明

  • nums:已排序的数组。
  • target:要查找的目标值。
  • 返回:如果找到目标值,返回其索引;否则返回 -1。

模板变体

二分查找算法有多种变体,以应对不同的问题场景。以下列出最常见的变体:

  • 查找第一个出现元素: 修改模板中的比较条件,当 nums[mid] 等于 target 时,将 right 指针更新为 mid - 1
  • 查找最后一个出现元素: 将比较条件修改为 nums[mid] 等于 target 时,将 left 指针更新为 mid + 1
  • 查找最接近元素: 如果目标值不在数组中,返回最接近目标值的元素索引。
  • 旋转数组二分查找: 处理数组被旋转的情况。
  • 有序矩阵二分查找: 用于查找有序矩阵中的元素。

LeetCode 题解

二分查找算法在 LeetCode 中广泛应用于查找问题。以下列出几个经典的 LeetCode 题解:

结论

掌握二分查找模板,是解决 LeetCode 查找难题的利器。本文提供的模板和 LeetCode 题解,将帮助你快速提升算法技能,在计算机科学领域如鱼得水。