首页 > 其他分享 >leetcode69-x的平方根

leetcode69-x的平方根

时间:2022-09-29 19:14:11浏览次数:77  
标签:xi leetcode69 Solution mid public int 平方根 x0

69. x 的平方根

 

简单题,但是考察的内容可以有很多

首先是纯暴力法,毫无特色。速度也很慢。

class Solution {
public:
    int mySqrt(int x) {
        long long i=1;
        while(1)
        {
            if(i*i<=x)   i++;
            else break;
        }
        return i-1;
    }
};

其次是二分法,面试官最希望看到的解法。注释的是官方解法,不知为何同样是二分法速度也有很大的差距。

class Solution {
public:
    int mySqrt(int x) {
        /*int l = 0, r = x, ans = -1;
        while (l <= r) {
            int mid = l + (r - l) / 2;
            if ((long long)mid * mid <= x) {
                ans = mid;
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return ans;*/
        if(x==0) return 0;
        if(x<=3) return 1;
        int left=1,right=x-1,mid;
        while(left<=right)
        {
            mid=left+(right-left)/2;
            if(1LL*mid*mid>x)   right=mid-1;
            else if(1LL*mid*mid<x) left=mid+1;
            else if(1LL*mid*mid==x) return mid;
        }
        return right;
    }
};

最后是牛顿迭代法,闻所未闻的解法,这是官方题解里的。还是看看原理吧

class Solution {
public:
    int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }

        double C = x, x0 = x;
        while (true) {
            double xi = 0.5 * (x0 + C / x0);
            if (fabs(x0 - xi) < 1e-7) {
                break;
            }
            x0 = xi;
        }
        return int(x0);
    }
};

 

 

 

标签:xi,leetcode69,Solution,mid,public,int,平方根,x0
From: https://www.cnblogs.com/uacs2024/p/16742659.html

相关文章

  • LeetCode 69. x 的平方根
    LeetCode69.x的平方根思路:浮点数二分修改版因为返回的是整数所以二分分三类讨论mid*mid==x该情况mid为x的平方根mid*mid>x该情况mid大于x的平方根mid......
  • 69. x 的平方根
    69.x的平方根给你一个非负整数x,计算并返回 x 的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意:不允许使用任何内置指数函数......
  • leetcode690-员工的重要性
    员工的重要性dfsclassSolution{Map<Integer,Employee>map=newHashMap<>();publicintgetImportance(List<Employee>employees,intid){......
  • leetcode698-划分为k个相等的子集
    划分为k个相等的子集回溯+剪枝首先先判断总和sum能否被整除。然后对数组排序,从后向前遍历。如果当前的值大于target,表明最大值已经超出范围,直接返回false如果当前的......
  • 习题2-5 求平方根序列前N项和
    #include<stdio.h>#include<math.h>intmain(){inti,n;doublesum,item;scanf("%d",&n);sum=0;for(i=1;i<=n;i++){item......