69. x的平方根

作者: 046ef6b0df68 | 来源:发表于2019-06-14 23:49 被阅读3次

    文|Seraph

    01 | 问题

    实现 int sqrt(int x) 函数。
    计算并返回 x 的平方根,其中 x 是非负整数。
    由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

    示例 1:

    输入: 4
    输出: 2

    示例 2:

    输入: 8
    输出: 2

    说明: 8 的平方根是 2.82842...,
    由于返回类型是整数,小数部分将被舍去。

    02 |解题

    初解:

    这是我写过的最无耻的初解......

    class Solution {
    public:
        int mySqrt(int x) {
            return sqrt(x);
        }
    };
    

    终解:

    牛顿迭代法

    class Solution {
    public:
        int mySqrt(int x) {
            if(x==0)
                return x;
            double r=1;//迭代初始值
            while(fabs(r*r-x)>0.5)//精度小于0.5就停止迭代
            {
                r=(r+x/r)/2;
            }
            return int(r);
        }
    };
    

    二分查找法

    class Solution {
    public:
        int mySqrt(int x) {
            if(x == 0 || x == 1)  return x;
            int left = 1, right = x;
            while(left <= right) {
                int mid = left + (right - left) / 2;
                if(mid == x / mid)  return mid;
                else if(mid > x / mid)  right = mid - 1;
                else    left = mid + 1;
            }
            return right;
        }
    };
    

    03 | 积累知识点

    官网链接 Leetcode No.69

    相关文章

      网友评论

        本文标题:69. x的平方根

        本文链接:https://www.haomeiwen.com/subject/hgzmfctx.html