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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM