0
点赞
收藏
分享

微信扫一扫

LeetCode69-X的平方根【Java】

Alex富贵 2022-01-06 阅读 76
  • 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留整数部分 ,小数部分将被舍去。

  • 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

public class LC69_SqrtX {
    public static void main(String[] args) {
        int i = getSqrtX(2147395599);
        System.out.println(i);
    }

    /**
     * 解题思路:使用二分查找,只有当mid * mid >= x 时候,才能找到这个数的完全平方根,
     * 并且一定在左指针上
     * 例如寻找5的平方根,2的平方是小于5的,3的平方是大于5的,此时就应该是2,在左指针
     * @param x
     * @return
     */
    private static int getSqrtX(int x) {
        //定义一个左指针
        int left = 0;
        //定义一个右指针
        int right = x;

        if (x==1) return 1;
        while (right-left > 1) {
            int mid = (right + left) / 2;
            //在数学层面,x / mid < mid 和 x <  mid * mid是一样的,
            //但为了避免当X足够大时,小于号右边过大,导致内存溢出,选择第一种写法
            if (x / mid <  mid) {
                right = mid ;
            } else {
                left = mid;
            }
        }
        return left;
    }
}
举报

相关推荐

0 条评论