【Leetcode】69. Sqrt(x)

题目地址:

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

发布了89 篇原创文章 · 获赞 0 · 访问量 1421
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览