【Leetcode】69. Sqrt(x)

空扰寡人 提交于 2020-01-16 18:47:33

题目地址:

https://leetcode.com/problems/sqrtx/

xx的平方根,向下取整。问题可以转述为,找到最大的int使得m2xm^2\le x,可以用二分法。为了防止溢出,用long过渡一下。

class Solution {
    public int mySqrt(int x) {
        int l = 0, r = x;
        while (l < r) {
            int mid = (int) (l + (((long) (r - l) + 1) >> 1));
            if (mid <= x / mid) {
                l = mid;
            } else if (mid > x / mid) {
                r = mid - 1;
            } 
        }
        
        return l;
    }
}

时间复杂度O(logn)O(\log n)。几个注记:
m<xmxm    m2<xm< \lfloor\frac{x}{m}\rfloor\le \frac{x}{m} \implies m^2<xm>xm    m>xm    m2>xm>\lfloor\frac{x}{m}\rfloor\implies m>\frac{x}{m} \implies m^2>xm=xmxm    m2xm= \lfloor\frac{x}{m}\rfloor\le \frac{x}{m} \implies m^2\le x

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!