测试用例:
示例1:
输入:4 输出: 2
示例2:
输入 :8 输出: 2
本题我采用了二分查找的方法,通过不断的缩小检测范围,与输入值x进行比较,详细情况如下:
首先,判断传入值是否为0或者1。将其单独进行讨论;其次,规定一个范围,mid为范围的中间值,利用 mid = left + (right - left + 1)/2是为了避免由于left和right过大导致的溢出。如果中间值大于传入值除以中间值,说明mid还是大于x的算术平方根,所以令right等于mid-1;直至循环结束。
int mySqrt(int x){
if(x == 0)
return 0;
if(x == 1)
return 1;
int left = 1,right = x/2,mid = 0;
while(left < right)
{
mid = left + (right - left + 1)/2;
if(mid > (x/mid))
{
right = mid - 1;
}
else
{
left = mid;
}
}
return left;
}