【LeetCode】二分搜索刷题【持续更新】

本人使用环境Python3+Pycharm。最近恢复刷题,持续更新,能点赞的点点赞,抱拳了。想要啥题号自己搜一下没有去我别的文章中搜,我目前的规划就是先刷数论,边刷编写哈~(我是刷完了但是写文章花时间呀,不要喷我噻)
目前涉及的题目编号:69
找题就复制这个,亲测好用:【你要查找的题号】
【69】x的平方根
题目要求:计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
题目分析:题目太简单了没有什么值得写的。我工程代码出身,我第一反应就是如下的代码:

    def mySqrt(self, x: int) -> int:
        return round(math.floor(math.sqrt(x)))

但是这个题的本意肯定不是这样的哈,下面用的是袖珍计算器算法,什么是袖珍计算器算法,其实实质上就是根号不好表达,将其换成指数和对数的形式,代码如下:

    def mySqrt(self, x: int) -> int:
        if x < 2 :
            return x
        left = int(e**(0.5*log(x)))
        right = left + 1
        if right * right > x:
            return left
        else:
            return right

此题还可以用二分法的思想去搞它,代码如下:

    def mySqrt(self, x: int) -> int:
        if x <= 2:
            return x
        left, right = 2, x // 2
        while left <= right:
            guess_digit = left + (right - left) // 2
            num = guess_digit ** 2
            if num > x:
                right = guess_digit -1
            elif num < x:
                left = guess_digit
            else:
                return guess_digit
        return right
发布了31 篇原创文章 · 获赞 33 · 访问量 3900

猜你喜欢

转载自blog.csdn.net/weixin_43071838/article/details/104600077