Sqrt(x)
Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well.
You must not use any built-in exponent function or operator.
For example, do not use pow(x, 0.5) in c++ or x ** 0.5 in python.
Solution:
class Solution(object):
def mySqrt(self, x):
l, r, ans = 0, x, -1
while l <= r:
mid = (l + r) // 2
if mid ** 2 <= x:
ans = mid
l = mid + 1
else:
r = mid - 1
return ans
思路:
要计算非负整数 x 的平方根并四舍五入到最接近的整数,我们可以使用二分查找的方法来实现。首先,我们可以定义两个整数 left 和 right 来表示 x 的平方根的区间范围。初始时,我们可以将 left 和 right 分别设置为 0 和 x。
然后,我们可以使用类似于二分查找的方法来缩小区间范围,直到 left 和 right 相等为止。具体来说,我们可以计算中间值 mid = (left + right) / 2,然后根据 mid 的平方与 x 的大小关系来更新 left 和 right。
具体来说,如果 mid 的平方小于 x,那么 left 应该设置为 mid + 1;否则,right 应该设置为 mid - 1。这样,当 left 和 right 相等时,就说明找到了 x 的平方根。
最后,我们可以将找到的整数平方根向下取整并返回结果。
人生便是艺术。