码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】Sqrt(x) (2 solutions)

时间:2014-12-09 19:26:03      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   strong   on   

Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x.

 

解法一:牛顿迭代法

求n的平方根,即求f(x)=x2-n的零点

设初始值为x0,注,不要设为0,以免出现除数为0,见后。

则过(x0,f(x0))点的切线为g(x)=f(x0)+f‘(x0)*(x-x0)

g(x)与x轴的交点为x1=x0-f(x0)/f‘(x0)

递推关系为xn+1=xn-f(xn)/f‘(xn)

当收敛时即为解。

class Solution {
public:
    int sqrt(int x) {
        double x0 = 1;
        double xn = (x0+x/x0)/2;
        while(abs(x0-xn) > 1e-5)
        {
            x0 = xn;
            xn = (x0+x/x0)/2;
        }
        return x0;
    }
};

bubuko.com,布布扣

 

解法二:二分法

注意返回为int,结果会取整。

class Solution {
public:
    int sqrt(int x) {
        long long low = 0;
        long long high = x;
        long long mid;
        while(low <= high)
        {
            mid = (low+high)/2;
            long long result = mid*mid;
            if(result == x)
                return mid;
            else if(result > x)
                high = mid-1;
            else
                low = mid+1;
        }
        return high;
    }
};

bubuko.com,布布扣

【LeetCode】Sqrt(x) (2 solutions)

标签:style   blog   http   io   ar   color   sp   strong   on   

原文地址:http://www.cnblogs.com/ganganloveu/p/4153935.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!