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

Leetcode 69.求x的根,返回整数

时间:2020-11-01 21:30:05      阅读:14      评论:0      收藏:0      [点我收藏+]

标签:时间复杂度   方法   题目   leetcode   查找   ++   条件   过程   etc   

Leetcode 69.求x的根,返回整数

题目

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

方法一:用数学函数

用exp和log函数计算x^1/2; 由于浮点数的精确度,运算过程中存在误差。

class Solution {
public:
    int mySqrt(int x) {
        if(x==0)
        return 0;//预处理x是0的情况
        int ans=(int)exp(0.5*log(x));
        if((long long)(ans+1)*(ans+1)<=x)//ans+1的平方可能溢出
        return ans+1;
        else
        return ans;
       
    }
};

时间复杂度O(1),exp和log函数运行很快

方法二:二分查找

class Solution {
public:
    int mySqrt(int x) {
        int l=0,r=x/2+1,mid;//一个数的平方不会超过它的平方加一
        while(l<=r)
        {
            mid=(l+r)/2;
            if((long long)mid*mid<x)//mid*mid可能溢出
            l=mid+1;
            if((long long)mid*mid>x)
            r=mid-1;
            if((long long)mid*mid==x)
            return mid;
        }
        return r;
    }
};

时间复杂度:O(log(x))

方法三:牛顿迭代

class Solution {
public:
    int mySqrt(int x) {
        if(x==0)return 0;
        double x0=x;
        while(1)
        {
            double x1=(x0+x/x0)/2;//迭代公式
            if(fabs(x0-x1)<1e-6)//迭代终止条件
            break;
            x0=x1;
        }
        return (int)(x0);
    }
};

Leetcode 69.求x的根,返回整数

标签:时间复杂度   方法   题目   leetcode   查找   ++   条件   过程   etc   

原文地址:https://www.cnblogs.com/Hfolsvh/p/13908551.html

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