题目:
mplement int sqrt(int x).
Compute and return the square root of x.
题意:
实现一个求平方的函数,参数是一个整数,返回的也是一个整数。
思路:
这道题很明显的使用二分查找。需要考虑特殊情况,比如说x是最大的整数之类的。
代码参见以下:
class Solution {
public:
int mySqrt(int x) {
if(x == 0 || x == 1)return x;
else if(x < 0)return -1;
long long middle = x/2;
long long lx = x;
long long head = 1;
long long tail = lx;
while(true){
if((middle - 1) < 0)break;
long long temp = middle * middle;
long long add = (middle + 1)*(middle + 1);
long long minus = (middle - 1)*(middle - 1);
if(temp <= lx && add > lx)break;
else if(temp < lx){
head = middle + 1;
}
else if(temp > lx){
tail = middle - 1;
}
middle = (tail + head)/2;
}
return middle;
}
};