2021/6/4 LeetCode 69 x的平方根

本文探讨了如何高效地实现整数平方根函数,通过对比顺序查找、二分查找和牛顿迭代法的性能,展示了优化求解过程。从初学者的顺序查找到优化的二分法,再到精确的牛顿迭代算法,为解决LeetCode问题提供了实用技巧。
摘要由CSDN通过智能技术生成

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4 输出: 2 示例 2:

输入: 8 输出: 2 说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sqrtx

感觉其实挺像是个查找算法(不包括牛顿迭代)
用了三个方法:
第一个是顺序:


```python
class Solution:
    def mySqrt(self, x: int) -> int:
        for i in range (0,x+1):
            if i*i<x:
                continue
            if i*i == x:
                return i
            if i*i>x:
                return i-1
结果就挺崩溃的 ,击败个位数。


第二个用的二分查找:

```python
class Solution:
    def mySqrt(self, x: int) -> int:
        if x == 1:
            return 1
        a = 0
        b = x   
        while(b-a>1):
            c = (a+b)//2
            print (c)
            if c*c == x:
                return c
            elif c*c < x:
                a = c
            elif c*c > x:
                b = c
        return a

算是好了一点点:
在这里插入图片描述
最后用的牛顿迭代:

class Solution:
    def mySqrt(self, x: int) -> int:
        if x == 0:
            return 0
        y0, x0 = float(x), float(x)
        while(True):
            x1 = (x0-y0/(2*x0)) 
            if (abs(x0 - x1) <1e-7):
                return int(x1)
            x0 = x1
            y0 = x1*x1 - float(x)

又好了一些:
在这里插入图片描述

算法还是有挺多改进的地方,有老铁路过感谢批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值