zoukankan      html  css  js  c++  java
  • Leetcode 69.求x的根,返回整数

    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);
        }
    };
    
  • 相关阅读:
    jQuary学习の三の效果展示
    jQuary学习の二の语法
    jQuary学习の一の初期准备
    js备战春招の四のjs函数
    javascript JSON
    js备战春招の四の表单
    js备战春招の四の严格模式
    290. Word Pattern--Easy
    546. Remove Boxes--Hard
    牛客网-华为-2020届校园招聘上机考试-3
  • 原文地址:https://www.cnblogs.com/Hfolsvh/p/13908551.html
Copyright © 2011-2022 走看看