[我尝试使用二进制搜索来找到整数的平方根,但是有些我无法通过一些测试用例。
我能够通过mySqrt(4)= 2,但是我无法通过mySqrt(2147395599)
关于我搞砸的任何想法?
public static int mySqrt(int x) {
int left = 0;
int right = x;
if(x < 2){
return x;
}
while(left < right){
int mid = left + ((right - left) / 2);
if(mid * mid == x){
return mid;
}
else if(mid * mid < x){
left = mid + 1;
}
else{
right = mid;
}
}
return left - 1;
}
因为中*中会溢出。您应该使用很长时间以避免溢出。然后在返回结果时将其强制转换为int。