LeetCode 经典:巧用二分查找,精准求平方根!
2023-09-29 04:42:16
算法之美:二分查找巧解平方根
二分查找:算法核心
平方根,一个数学中的基本概念,表示一个数的平方后的结果。对于一个非负整数 x,它的平方根是一个非负实数 y,满足 y² = x。计算平方根在数学和编程中有着广泛的应用,从几何学到统计学,再到计算机图形学。
二分查找:步步逼近
LeetCode 的这道题目要求我们计算 x 的算术平方根,即一个最接近 x 平方根的整数。而二分查找算法正是解决这类问题的利器。二分查找是一种搜索算法,它通过不断将搜索区间对半分,来快速定位目标元素。
我们的算法流程如下:
- 初始化搜索范围: 将搜索范围设定为 [0, x],因为平方根一定在这两个整数之间。
- 二分查找:
- 计算搜索区间的中间值 mid。
- 如果 mid² 等于 x,则 mid 就是 x 的平方根。
- 如果 mid² 小于 x,则平方根更大,将搜索范围调整为 [mid + 1, x]。
- 如果 mid² 大于 x,则平方根更小,将搜索范围调整为 [0, mid - 1]。
- 循环查找: 重复步骤 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 上还有海量的题目等待你的探索,快来挑战自己,提升你的算法思维吧!
常见问题解答
-
什么是二分查找算法?
二分查找算法是一种搜索算法,它通过不断将搜索区间对半分,来快速定位目标元素。 -
二分查找算法的时间复杂度是多少?
二分查找算法的时间复杂度为 O(log n),其中 n 是搜索区间的长度。 -
如何使用二分查找算法计算平方根?
初始化搜索范围为 [0, x],然后重复以下步骤:- 计算搜索区间的中间值 mid。
- 如果 mid² 等于 x,则 mid 就是 x 的平方根。
- 如果 mid² 小于 x,则平方根更大,将搜索范围调整为 [mid + 1, x]。
- 如果 mid² 大于 x,则平方根更小,将搜索范围调整为 [0, mid - 1]。
重复步骤直到搜索区间缩小到只剩一个元素,该元素就是 x 的算术平方根。
-
LeetCode 题目中给出的代码有什么特点?
给出的代码简洁明了,清晰地展现了二分查找算法的实现过程。 -
二分查找算法有什么优点?
二分查找算法具有以下优点:- 时间复杂度低(O(log n))。
- 易于理解和实现。
- 在有序数组中查找元素非常高效。