LintCode x的平方根

x的平方根

實現 int sqrt(int N) 函數,計算並返回 N 的平方根。
樣例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
挑戰
O(log(x))

solution: 如果使用蠻力法來求解的話,肯定是會超時的。因此,我們需要使用牛頓迭代法來求解這問題
牛頓迭代法: 對於給定一個函數f(x) = 0,的解爲x0 ;那麼我們可以通過牛頓迭代的方法來求解x0 , 其迭代公式爲:
xk+1=xk - f(xk)f(xk)
xk+1xk<ϵ 時停止迭代, ϵ 爲精度, xk 的初始值一般取0,或者1。

在本題中取f(x)=x2N ,因此我們有:
xk+1=xkx2kN2xk
化簡得:
xk+1=12(xk+Nxk)

code :

class Solution {
public:
    /**
     * @param x: An integer
     * @return: The sqrt of x
     */
    int sqrt(int x) {
        double i = 1, j;
        do {
            j = (i + x / i) * 0.5;
            if (abs(j -i) < 1)
                return (int) j;
            i = j;
        } while (1);

        return 1;
    }
};
發佈了49 篇原創文章 · 獲贊 22 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章