C++ 代码
// 通过代码
class Solution {
public:
int mySqrt(int x) {
int l = 1, r = x;
while(l < r)
{
int mid = l + (long long)r >> 1;
if(mid > x / mid ) r = mid;
else l = mid + 1;
}
// r * r > x分开的是 0 ~ [x](下取整) 和 [x](下取整) + 1 ~ x
// 最后得到的是右边区域的左端点([x](下取整) + 1),所以最后的答案是l - 1 或者 r - 1
// 当然还需要对0 和 1 特殊处理一下
return x <= 1 ? x : r - 1; // 这里的判断要复杂一点,还是上一个模板好用
}
};