二分搜索考虑溢出的情况,所以要用long!(好多这种trick啊)
public class Solution {
public int sqrt(int x) {
if (x <= 1) return x;
long beg = 1;
long end = x/2;
while (beg <= end) {
long mid = (beg + end)/2;
long t1 = mid * mid;
long t2 = (mid + 1) * (mid + 1);
if (t1 <= x && t2 > x) {
return (int)mid;
}
if (t2 <= x) {
beg = mid + 1;
} else {
end = mid - 1;
}
}
return (int)beg; //<span style="font-family: Arial, Helvetica, sans-serif;">强制类型转换回来!</span>
}
}