二分
通过 mid = left + (right - left) / 2; 来取平均值
public static int mySqrt(int x) {
if(x <= 1) {
return x;
}
int left = 1;
int right = x;
int mid = 1;
while(left <= right) {
mid = left + (right - left) / 2;
int sqre = x / mid;
if(sqre == mid ) {
return mid;
}else if (sqre < mid) {
right = mid - 1;
}else {
left = mid + 1;
}
}
return right;
}
注意不能通过 mid * mid 来判断 mid与 x 的关系
因为mid
很大的时候,mid * mid 有可能会整型溢出使用 mid * mid > x 不能通过的测试用例如下: