这个记住是2分法处理,i从0,j从x/2+1开始算。
当中,必须用long而非int,否则遇到类似2147395599的大数,会超过int的范围,出差。
public class Solution {
public int mySqrt(int x) {
long i = 0;
long j = x/2 + 1;
while (i <= j) {
int mid = i + (j - i) / 2;
if (mid * mid == x) {
return (long)mid;
} else if (mid * mid > x) {
j = mid - 1;
} else {
i = mid + 1;
}
}
return (long)j;
}
}