【LeetCode】69. x 的平方根(JAVA)

不羁的心 提交于 2020-02-10 15:56:27

原题地址:https://leetcode-cn.com/problems/sqrtx/

题目描述:
实现 int sqrt(int x)函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:
输入: 4
输出: 2

示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。

解题方案:
参考:https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-niu-dun-fa-python-dai-ma-by-liweiw/
采用二分法的变形,上界选择x/2 +1是因为对于大部分x,x<x2\sqrt{x}<\dfrac{x}{2},例外只有0,1,2,3,而这三个数也满足x<x2+1\sqrt{x}<\dfrac{x}{2}+1。mid需要选择右中值是为了防止只有两个元素时陷入死循环。

代码:

class Solution {
    public int mySqrt(int x) {
        long left = 0, right = x / 2 + 1, mid;
        while(left < right)
        {
            mid = (left + right + 1) / 2;
            if(mid * mid > x)
                right = mid - 1;
            else
                left = mid;
        }
        return (int) left;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!