其他分享
首页 > 其他分享> > 力扣69——X的平方根

力扣69——X的平方根

作者:互联网

题目描述
给定一个非负整数,求它的开方,向下取整。
输入输出样例
输入一个整数,输出一个整数。
Input: 8
Output: 2

8 的开方结果是 2.82842…,向下取整即是 2。
题解
可以把这道题想象成,给定一个非负整数 x,求 f (a) =a^2 − x= 0 的解。

因为我们只考虑 x≥ 0,所以 f (a) 在定义域上是单调递增的。
考虑到 f (0) = −x ≤ 0, f (x) = x^2 − x ≥ 0,粗略的讲上线定为X
我们可以对 [0, x ] 区间使用二分法找到 f (a) = 0 的解。

注意,在以下的代码里,为了防止除以 0,我们把 a = 0 的情况单独考虑,然后对区间 [1, a]进行二分查找。使用了左闭右闭的写法。

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

在这里插入图片描述

标签:return,非负,int,mid,sqrt,力扣,整数,69,平方根
来源: https://blog.csdn.net/qq_45498613/article/details/122789742