2021-5-14 更新
class Solution {
public:
int mySqrt(int x) {
if(x == 0) return 0; // 0 无法当除数,要单独考虑
int l = 1, r = x; // 从0开始,可能后面求m中,会出现 m = 0,故避免掉,直接1开始
while(r > l){
int m = l + (r - l) / 2;
if(m >= x / m) r = m; // 不用考虑溢出
else l = m + 1;
}
return l > x / l?(l - 1): l;
}
};
class Solution {
public:
int mySqrt(int x) {
double l = 0 , r = x + 1.0; // x是int,要转换
while(r > l){
double m = l + (r - l) / 2;
if(m * m >= x) r = m;
else l = m + 1;
}
l = int(l);
double res = l * l;
return res > x?(l - 1): l;
}
};
class Solution {
public:
int mySqrt(int x) {
if(x==0) return 0;
int l=1, r = x ;
while(l<r){
int mid = l+(r-l)/2;
if(mid == x/mid){
return mid;
}
else if(mid<x/mid){
l=mid+1;
}
else
r = mid-1;
}
if(l>x/l) l--;
return l;
}
};