【力扣刷题】69.x的平方根-二分

【力扣刷题】69.x的平方根-二分

给你一个非负整数 x ,计算并返回 x算术平方根

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

提示:

  • 0 <= x <= 231 - 1
class Solution {
public:
    int mySqrt(int x) {
        double l=0,r=x;
        while(l<=r){
            double m=l+((r-l)/2);
            double t=m*m;
            if(abs(t-x)<1e-6){
                cout<<"a"<<endl;
                if(double(round(m)*1.0-m)<1e-6){
                    return round(m);
                }else{
                    return int(m);
                }
            }else if(t-x>1e-6){
                cout<<"r"<<endl;
                r=m;
            }else{
                cout<<"l"<<endl;
                l=m;
            }
            cout<<l<<" "<<r<<" "<<m<<" "<<t<<endl;
        }
        return 0;
    }
};

官方题解(将所有运算变成整数运算)

class Solution {
public:
    int mySqrt(int x) {
        int l=0,r=x,ans=-1;
        while(l<=r){
            int m=l+((r-l)/2);
            if((long long)m*m<=x){
                ans=m;
                l=m+1;
            }else{
                r=m-1;
            }
            // cout<<l<<" "<<r<<" "<<m<<" "<<t<<endl;
        }
        return ans;
    }
};

版权声明:
作者:2864818644
链接:http://zhx.info/archives/184
来源:张鸿兴的学习历程
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录