返回

LeetCode 经典:巧用二分查找,精准求平方根!

后端

算法之美:二分查找巧解平方根

二分查找:算法核心

平方根,一个数学中的基本概念,表示一个数的平方后的结果。对于一个非负整数 x,它的平方根是一个非负实数 y,满足 y² = x。计算平方根在数学和编程中有着广泛的应用,从几何学到统计学,再到计算机图形学。

二分查找:步步逼近

LeetCode 的这道题目要求我们计算 x 的算术平方根,即一个最接近 x 平方根的整数。而二分查找算法正是解决这类问题的利器。二分查找是一种搜索算法,它通过不断将搜索区间对半分,来快速定位目标元素。

我们的算法流程如下:

  1. 初始化搜索范围: 将搜索范围设定为 [0, x],因为平方根一定在这两个整数之间。
  2. 二分查找:
    • 计算搜索区间的中间值 mid。
    • 如果 mid² 等于 x,则 mid 就是 x 的平方根。
    • 如果 mid² 小于 x,则平方根更大,将搜索范围调整为 [mid + 1, x]。
    • 如果 mid² 大于 x,则平方根更小,将搜索范围调整为 [0, mid - 1]。
  3. 循环查找: 重复步骤 2,直到搜索区间缩小到只剩一个元素,此时该元素就是 x 的算术平方根。

代码实现:简洁明了

def mySqrt(x: int) -> int:
    left, right = 0, x
    while left <= right:
        mid = left + (right - left) // 2
        if mid * mid == x:
            return mid
        elif mid * mid < x:
            left = mid + 1
        else:
            right = mid - 1
    return right

复杂度分析:高效快速

二分查找算法的时间复杂度为 O(log n),其中 n 是搜索区间的长度。对于这道题目,搜索区间长度为 x,因此算法复杂度为 O(log x)。在实际应用中,算法效率非常高,即使对于非常大的 x,也能快速计算出平方根。

算法之美:探索无限可能

LeetCode 的这道题目看似简单,但它巧妙地运用了二分查找算法,充分体现了算法的精髓。通过将问题分解成一个个小步骤,算法能够高效地求解复杂的问题。无论是新手还是经验丰富的程序员,这道题都值得深入研究和实践。

踏上算法之旅,你会发现更多算法之美。LeetCode 上还有海量的题目等待你的探索,快来挑战自己,提升你的算法思维吧!

常见问题解答

  1. 什么是二分查找算法?
    二分查找算法是一种搜索算法,它通过不断将搜索区间对半分,来快速定位目标元素。

  2. 二分查找算法的时间复杂度是多少?
    二分查找算法的时间复杂度为 O(log n),其中 n 是搜索区间的长度。

  3. 如何使用二分查找算法计算平方根?
    初始化搜索范围为 [0, x],然后重复以下步骤:

    • 计算搜索区间的中间值 mid。
    • 如果 mid² 等于 x,则 mid 就是 x 的平方根。
    • 如果 mid² 小于 x,则平方根更大,将搜索范围调整为 [mid + 1, x]。
    • 如果 mid² 大于 x,则平方根更小,将搜索范围调整为 [0, mid - 1]。
      重复步骤直到搜索区间缩小到只剩一个元素,该元素就是 x 的算术平方根。
  4. LeetCode 题目中给出的代码有什么特点?
    给出的代码简洁明了,清晰地展现了二分查找算法的实现过程。

  5. 二分查找算法有什么优点?
    二分查找算法具有以下优点:

    • 时间复杂度低(O(log n))。
    • 易于理解和实现。
    • 在有序数组中查找元素非常高效。