leetcode 69. x 的平方根

 

 

牛顿法:这个方法更快,但是有两点注意:

1)牛顿法的原理:

2)更新值时溢出的问题:

牛顿法的前提:这个表达式在至少求解范围是单调递增的;

溢出减少就是使计算式的数字尽量小,尽量先做差再做和,或者先创造差,再做和;

 

class Solution {
public:
    int mySqrt(int x) {
        if(x==0 || x==1) return x;
        int r=x;
        while(r>x/r){
            r=x/r+(r-x/r)/2;
        }
        return r;
    }
};

 二分法:

class Solution {
public:
    int mySqrt(int x) {
        if(x==0 || x==1) return x;
        int l=0,r=x,res;
        while(l<=r){
            int m=(l+r)/2;
            if(m==x/m) return m;
            if(m>x/m)
                r=m-1;
            else{
                l=m+1;
                res=m;
            }
        }
        return res;
    }
};

 

posted @ 2019-04-17 11:20  Joel_Wang  阅读(138)  评论(0编辑  收藏  举报