X的平方根 Sqrt X

文章目录

X的平方根

实现一个int sqrt(int x)函数。计算X的平方根,X>=0.返回值保留整数部分。

思路

可以通过二分查找缩短区间,假设存在X的平方根 y,一定满足y*y<=X。那就是要寻找到满足这个不等式条件的最大y值。

设定边界为0,X,每一次比较mid*mid <=X。并且调整boundary.

public int mySqrt(int x) {
    
    
        int l =0;
        int r =x ;
        int mid = 0;
        while(l<r){
    
    
            mid = (r - l) / 2 + l + 1;
            if(mid<=x/mid){
    
    
                l = mid;
            }
            else{
    
    
                r = mid-1;
            }
        }
        return l;
    }

还可以使用数学中的牛顿迭代

 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 (Math.abs(x0 - xi) < 1e-7) {
    
    
                break;
            }
            x0 = xi;
        }
        return (int) x0;
    }

Tag

math binarysearch

猜你喜欢

转载自blog.csdn.net/edisonzhi/article/details/118086562