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;
}
};