141-x的平方根
实现 int sqrt(int x) 函数,计算并返回 x 的平方根。
样例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3挑战
O(log(x))
标签
数学 二分法 脸书
思路
参考http://blog.csdn.net/lyy_hit/article/details/49785677
使用二分法,将 mid*mid 的值与 x 比较,但为了防止计算评方时发生溢出,二分上限为 46341 而非 x 的值。
又因为待求数的平方根有可能是介于两个整数之间的,这种情况需要做一下判断处理,否则会陷入死循环中。
code
class Solution {
public:
/**
* @param x: An integer
* @return: The sqrt of x
*/
int sqrt(int x) {
// write your code here
int low = 0, high = 46341, mid = 0;
while(low <= high) {
if (mid == low + (high-low)/2) {
break;
}
mid = low + (high-low)/2;
int square = mid * mid;
if(square == x) {
return mid;
}
else if(x > square){
low = mid;
}
else {
high = mid;
}
}
return mid;
}
};