int mySqrt(int x){
int left=1,right=x;
while(left<=right){
int mi = left + (right-left)/2;
int sqrt = x/mi;
if(sqrt<mi){
right = mi-1;
}else if(mi<sqrt){
left = mi+1;
}else if(mi==sqrt){
return mi;
}
}
return right;
}
TIPS: left + (right - left) / 2 无法写成 left + (right - left) >> 1
解释:binarysearch查找一个相近的数字,注意条件:条件是用x和mi^2做判断的,用sqrt = x / mi防止数据溢出,还有return也要注意。
1.return right:因为right作为较小数。
2.x和mi^2做判断:因为sqrt()函数。
当mi^2在x左边的时候,因为再缩范围就没有办法在平方等于x了,所以范围往右走Left = mi + 1
同理,当mi^2在x右边的时候,范围往左走Right = mi -1。