面试算法总结:二分查找
LeetCode----69. x 的平方根
https://leetcode-cn.com/problems/sqrtx/submissions/
#基本思路
#首选想到,从1到x进行遍历,求出平方根,复杂度为O(n)
#但是其实可以用时间复杂度好一些的算法,就是使用二分法查找
#中间位置的数,然后把这个数的平方以及这个数的上上一个数的平方分别于x作比较,找出相等的或者介于两者之间的数
#返回找到数,则题解
class Solution:
def mySqrt(self, x: int) -> int:
if not x:
return 0
left = 1
right = x
now = (left + right) // 2 ** 2
while left <= right:
middle = (left + right) // 2
temp = middle ** 2
if (middle-1) ** 2 < x < temp:
return middle - 1
if (middle-1) ** 2 == x:
return middle-1
if temp == x:
return middle
if temp > x:
right = middle - 1
if temp < x:
left = middle + 1
解法推广
#本题leetCode求得是平方根的整数部分,我们将其扩展到求它的精确的平方根
#这里使用牛顿迭代法,十分简单快捷
def compute(x):
if not x:
return 0
x_f = x
while x_f ** 2 > x:
x_f = (x_f + x / x_f) / 2
print(x_f)
return x_f
if __name__ == '__main__':
s = 9
answer = compute(s)
print(answer)