X的平方根 Sqrt X
实现一个int sqrt(int x)
函数。计算X
的平方根,X>=0.返回值保留整数部分。
思路
可以通过二分查找缩短区间,假设存在X的平方根 y,一定满足y*y<=X。那就是要寻找到满足这个不等式条件的最大y值。
设定边界为0,X,每一次比较mid*mid <=X。并且调整boundary.
public int mySqrt(int x) {
int l =0;
int r =x ;
int mid = 0;
while(l<r){
mid = (r - l) / 2 + l + 1;
if(mid<=x/mid){
l = mid;
}
else{
r = mid-1;
}
}
return l;
}
还可以使用数学中的牛顿迭代
public int mySqrt(int x) {
if (x == 0) {
return 0;
}
double C = x, x0 = x;
while (true) {
double xi = 0.5 * (x0 + C / x0);
if (Math.abs(x0 - xi) < 1e-7) {
break;
}
x0 = xi;
}
return (int) x0;
}
Tag
math
binarysearch