&LeetCode69& x的平方根

题目

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

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

来源:力扣(LeetCode

思路

能想到的方法就是算某值的平方,然后去和x比较大小。
为压缩查找的时间,此处采用二分搜索法来找平方根;
还有,此处如果x为整型最大值,再加1就会溢出,
所以,返回值是 right-1,因为题中要把小数部分减去,只有减1才会得到正确值。

C++代码

class Solution {
public:
    int mySqrt(int x) 
    {
        if (x <= 1) 
        {
            return x;
        }
        int left = 0, right = x;
        while (left < right) 
        {
            int mid = left + (right - left) / 2;
            if (x / mid >= mid) 
            {
                left = mid + 1;
            }
            else 
            {
                right = mid;
            }
        }
        return right - 1;
    }
};
发布了51 篇原创文章 · 获赞 20 · 访问量 2110

猜你喜欢

转载自blog.csdn.net/weixin_40482465/article/details/104414888