Datawhale leetcode day1 NO.69_x 的平方根

Datawhale leetcode day1 NO.69_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; mid:,说明midmid&gt;xmid*mid&gt;x,要让midmid变小一点,于是h=mid1h = mid - 1;,下次mid=l+(hl)//2mid = l + (h - l) // 2;的时候midmid才会变小,
同理if sqrt&gt;midsqrt &gt; mid:,说明midmid&lt;xmid*mid&lt;x了,要让midmid变大一点,于是l=mid+1l = mid + 1;,当两个界lowlowhighhigh重叠时,即l=hl=h,那么此时的midmidmid*mid是大于xx且最近接xx的数,于是h1h-1即为所求。

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