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

面试算法总结:二分查找

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值