题目
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例:
输入:4
输出:2
输入:8
输出:2
题解
二分查找,数据会比较大,定义成了long,占用了更多的空间,没有考虑太多的因素,因此效率比较低。这题还可以可以用牛顿迭代法来解,相当于求f(x) = x - a2 的零点,套公式写代码即可。
代码
class Solution {
public int mySqrt(int x) {
long left = 0;
long right = x;
while (left < right) {
long mid = (left + right + 1) / 2;
if ( mid * mid <= x) {
left = mid;
} else {
right = mid - 1;
}
}
return (int) right;
}
}