leetcode69 x 的平方根

实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。

思路:
本题使用二分法,设置上界和下界,取中值与x相除,检验其与x平方根大小差距,然后重新定义上下界。这样迭代下去有两种情况,中值与x相除得到本身,直接求出平方根;由于舍去小数部分中值已经取到平方根,但与x相除得数无法相等,此时需要将上下界收敛到平方根的值,最终导致上界小于下界,将此作为循环结束条件,由于舍去小数部分,此时需要取较小的上界作为答案。

class Solution {
public:
    int mySqrt(int x) {
        if(x==0) return 0;
        long int a,b,c,d;
        a=1;
        b=x;
        while(a<=b)
        {
            c=(a+b)/2;
            d=x/c;
            if(c>d)
            {
                b=c-1;
            }
            else if(c<d)
            {
                a=c+1;
            }
            else
            {
                return d;
            }
        }
        return b;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值