【LeetCode】面试算法总结@二分查找

面试算法总结:二分查找

  • LeetCode----69. x 的平方根
  • 解法推广

LeetCode----69. x 的平方根

https://leetcode-cn.com/problems/sqrtx/submissions/
【LeetCode】面试算法总结@二分查找_第1张图片

#基本思路
#首选想到,从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)

你可能感兴趣的:(面试算法题类型总结)