lintcode-141-x的平方根

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;
    }
};
posted @ 2017-07-23 14:43  LiBaoquan  阅读(1723)  评论(0编辑  收藏  举报