class Solution {
public:
int mySqrt(int x) {
if(x == 0)
return 0;
int left = 1;
int right = x/2+1;//一个数的平方根的范围是在1到x/2之间。
int index = -1;
int mid = 0;
while(left<=right)//返回的是整数
{
mid = left+(right-left)/2;
if(mid == x/mid)//mid 在这里不可能为0。
{
return mid;//如果能找到直接返回。
}
else if(mid<x/mid)
{
left = mid+1;
index = mid;//可能会找不到刚好相等的值,因为mid都是整数,如果小于可能刚好就是这个最接近根号x也可能不是,所以先令index保持这个值,在继续进行循环,等整个循环完毕后出来的index一定是最接近这个值的整数。如果答案是4此left = 4,当right不断减少到等于5时,再进行去平均数,此时mid就变成四了,接着下面的查找就能找到了。
}
else
{
right = mid-1;
}
}
return index;
}
};