一、题目叙述:
Implement int sqrt(int x)
.
Compute and return the square root of x.
Subscribe to see which companies asked this question
即,求给定整数的平方根。
二、解题思路:
我是参考了别人的方法。。。
1、使用二分查找,当 x / mid > mid 且 x / (mid + 1) < (mid + 1)时, mid即为需返回的值。
注意:(1)此处不要使用mid * mid 之类的乘法直接与x比较,会溢出。。。
(2)还有 注意特殊情况 0,1等。
三、源码:
import java.math.BigInteger;
public class Solution
{
public int mySqrt(int x)
{
if (x == 1 || x == 0) return x;
if (x < 0) return -1;
int lo = 1;
int hi = x / 2;
// BigInteger temp = BigInteger.valueOf(hi * hi);
// double z = Math.sqrt(Integer.MAX_VALUE);
// if (hi > (int)z) hi = (int)z;
while (lo <= hi)
{
int mid = lo + (hi - lo) / 2;
if (x / mid < mid)
{
hi = mid - 1;
}
else
{
//if (mid == hi) return mid;
if ( x / (mid + 1) < (mid + 1))
return mid;
else lo = mid + 1;
}
}
return -1;
}
public static void main(String args[])
{
int nums = 2147483647;
Solution solution = new Solution();
System.out.println(solution.mySqrt(nums));
}
}