0
点赞
收藏
分享

微信扫一扫

69. Sqrt(x)

芥子书屋 2022-01-26 阅读 45

方法一:二分法

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int mySqrt(int x) {
        //注:在中间过程计算平方的时候可能出现溢出,所以用long long。
        long long i=0;
        long long j=x/2+1;//对于一个非负数n,它的平方根不会大于(n/2+1)
        while(i<=j)
        {
            long long mid=(i+j)/2;
            long long res=mid*mid;
            if(res==x) return mid;
            else if(res<x) i=mid+1;
            else j=mid-1;
        }
        return j;
    }
};

作者:chenlele
链接:https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-gpe3dbjds1/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public:
    int mySqrt(int x) {
        int left = 1, right = (x >> 1) + 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (mid > x / mid) {
                right = mid - 1;
            } else if (mid < x / mid) {
                left = mid + 1;
            } else {
                return mid;
            }
        }
        return right;       
    }
};

作者:Dine
链接:https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-cyu-yan-by-dine/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

方法二:牛顿法

在这里插入图片描述

class Solution {
public:
    int mySqrt(int x) {
        if (x == 0) return 0;
        double last=0;
        double res=1;
        while(res!=last)
        {
            last=res;
            res=(res+x/res)/2;
        }
        return int(res);
    }
};

举报

相关推荐

0 条评论