LeetCode: 69. X的平方根

解法有两个,1.二分法,2. 基本不等式法(牛顿迭代法)

基本知识是:\frac{1}{2}x + 1 > \sqrt{x} 对于任意的x、不信的话,可以通过求导发现y = \frac{1}{2}x+1 - \sqrt{x}的极值点为1,值为0.5,当x小于1,y的导数为负,说明y在递减;当x大于1,y的导数为正,说明y在递增,说明0.5是y的最小值,恒大于0。因此我们就可以用0.5x+1作为上界,通过二分求解

二分法,无理解难点,就是边界条件需要琢磨一下。

class Solution:
    def mySqrt(self, x: int) -> int:
        if x <= 1:
            return x
        left = 1  #1 
        right = x //2 +1  # 5, 2 
        while left < right:
            mid = left + (right - left + 1) //2
            if mid **2 == x:
                return mid
            if mid ** 2 < x:
                left = mid
            else:
                right = mid -1 
        return left

基本不等式法或者称为牛顿迭代法,

 

 

class Solution:
    def mySqrt(self, x: int) -> int:
        if x <=1:
            return x 
        r = x / 2
        while r**2 > x:
            r = (r + x/r) // 2   # 这里必须是整除
        return int(r)
            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值