69. Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x.

一刷
題解:

二分法
Time Complexity - O(logn), Space Complexity - O(1)

public class Solution {
    public int mySqrt(int x) {
        if(x<=1) return x;
        int lo = 0, hi = x;
        while(lo<=hi){
            int mid = lo + (hi - lo)/2;
            if(mid == x/mid) return mid;
            else if(mid < x/mid) lo = mid+1;
            else hi = mid-1;
        }
        
        return hi;
    }
}

牛頓法
x^2 = a(a為input, x為root), 則轉(zhuǎn)化為方程y = x^2 - a,根據(jù)轉(zhuǎn)移逼近方程,xn+1 = xn - f(x) / f'(x),則有xn+1 = (xn + a / xn) / 2

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

推薦閱讀更多精彩內(nèi)容