这道题考察的也是二分查找,应该注意的是边界条件,当x为0或者为1时需要讨论一下,然后保证跳出循环时,left的值刚好比那个理想值大1.一般情况下,while里面如果是<=,那么里面的left和right的值就会在mid基础上加1或是-1.当然,个别题还需要多加注意边界条件,二分查找的题思路很简单,但是边界条件很多,需要重视。
int mySqrt(int x) {
if(x == 0)return 0;
if(x == 1)return 1;
int left = 0,right = x;
while(left <= right){
int mid = left + (right - left) / 2;
if(x/mid >= mid)left = mid + 1;
else
right = mid-1;
}
return left - 1;
}