实现 int sqrt(int x) 函数,计算并返回 x 的平方根。
转换一下思路,还是二分查找问题:
寻找ans * ans <= x的最后一个int型ans.
此处需要注意一点就是 mid * mid 可能会溢出,这里采取的是将mid除到等号的右边。当然是用long型也可以,最后再强转一下。
public int sqrt(int x) {
if (x <= 0) {
return 0;
}
int start = 1;
int end = x;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (mid == x / mid) {
start = mid;
} else if (mid < x / mid) {
start = mid;
} else {
end = mid;
}
}
if (end <= x / end) {
return end;
} else {
return start;
}
}