CSn*_*bie 1 java binary-search square-root
我尝试使用二分搜索来查找整数的平方根,但有些我无法通过一些测试用例。
我能够传递 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;
}
Run Code Online (Sandbox Code Playgroud)
因为mid * mid会溢出。您应该使用 long 以避免溢出。然后在返回结果时将其强制转换回 int。
试试这个代码
public static int mySqrt(int x) {
long left = 0;
long right = x;
if(x < 2){
return x;
}
while(left < right){
long mid = left + ((right - left) / 2);
if(mid * mid == x){
return (int)mid;
}
else if(mid * mid < x){
left = mid + 1;
}
else{
right = mid;
}
}
return (int)(left - 1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4051 次 |
| 最近记录: |