leetcode NO.69_x 的平方根 白痴讲解

介绍了一种使用二分查找算法来寻找整数x平方根的方法。该方法通过不断缩小搜索范围,最终找到最接近x平方根的整数值。

在这里插入图片描述

一个数 x 的开方 sqrt 一定在 0 ~ x 之间,并且满足 sqrt == x / sqrt 。可以利用二分查找在 0 ~ x 之间查找 sqrt。

class Solution:
    def mySqrt(self, x: int) -> int:
        if x <= 1:
            return x;
        l = 1;
        h = x;
        while l <= h:
            mid = l + (h - l) // 2;
            sqrt = x / mid;
            if sqrt == mid:
                return mid;
            else:
                if sqrt < mid:
                    h = mid - 1;
                else: 
                    l = mid + 1;
        return h;

思想就是if sqrt&lt;midsqrt &lt; midsqrt<mid:,说明mid∗mid&gt;xmid*mid&gt;xmidmid>x,要让midmidmid变小一点,于是h=mid−1h = mid - 1h=mid1;,下次mid=l+(h−l)//2mid = l + (h - l) // 2mid=l+(hl)//2;的时候midmidmid才会变小,
同理if sqrt&gt;midsqrt &gt; midsqrt>mid:,说明mid∗mid&lt;xmid*mid&lt;xmidmid<x了,要让midmidmid变大一点,于是l=mid+1l = mid + 1l=mid+1;,当两个界lowlowlowhighhighhigh重叠时,即l=hl=hl=h,那么此时的mid∗midmid*midmidmid是大于xxx且最近接xxx的数,于是h−1h-1h1即为所求。

最后必将收敛到l=k,h=k+1l=k,h=k+1l=k,h=k+1的形式,因为x会夹在两个平方数k2k^2k2(k+1)2(k+1)^2k+12之间,最后mid=k,mid2&lt;xmid=k,mid^2&lt;xmid=k,mid2<x,对应sqrt&lt;midsqrt&lt;midsqrt<midh=kh=kh=k,return hhh正合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值