69. Sqrt(x)

問題

Implement int sqrt(int x).

Compute and return the square root of x.

例子

sqrt(8)
2

分析

注意到sqrt的返回值為int,不是float或者double,這樣問題就簡單很多了。而且經過測試可以發(fā)現(xiàn),s = sqrt(x),s應該是滿足s*s<=x的最大值。

使用二分法可以在O(logn)的時間找到一個整數的整數平方根。

要點

二分法(lower_bound)

時間復雜度

O(logn)

空間復雜度

O(1)

代碼

class Solution {
public:
    int mySqrt(int x) {
        if (x < 0) return INT_MIN;
        
        int begin = 0, end = x, mid = 0;
        while (begin < end) {
            mid = (begin + end) / 2 + 1;
            long long mid2 = (long long)mid * mid;
            if (mid2 > x)
                end = mid - 1;
            else
               begin = mid; 
        }
        return begin;
    }
};

牛頓迭代法

class Solution {
public:
    int mySqrt(int x) {
        long long r = x;
        while (r*r > x)
            r = (r + x/r) / 2;
        return r;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容