原题链接:力扣
solution:
class Solution {
public:
int mySqrt(int x) {
if(x <= 1) return x; //特判
int l = 0, r = x;
while(l < r)
{
int mid = l + r + 0ll >> 1 ;
if(mid > x / mid) r = mid;
else l = mid + 1 ;
}
return l - 1 ;
}
};
总结:
二分返回的是第一个大于sqrt(x)的数字,因此答案需要-1
在第一次求mid的时候有可能会溢出,利用l+r+0ll可以将数字转化为long long,再除以2一定在int的范围内。