每日OJ题_算法_二分查找③_力扣69. x 的平方根

目录

力扣69. x 的平方根 

解析代码


力扣69. x 的平方根 

69. x 的平方根 - 力扣(LeetCode)

难度 简单

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

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

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

示例 1:

输入:x = 4
输出:2

示例 2:

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

提示:

  • 0 <= x <= 2^31 - 1
class Solution {
public:
    int mySqrt(int x) {

    }
};

解析代码

暴力解法可以遍历1到X / 2的所有整数,因为这段整数是有序的,所有可以用二分算法,用上一题力扣34总结的进阶二分套路,求右端点:

class Solution {
public:
    int mySqrt(int x) {
        if(x <= 1) // 看给的范围处理边界
        {
            return x / 1; // 如果是1的话下面right就是0了
        }
        int left = 0, right = x / 2;
        while(left < right)
        {
            long long mid = left + (right - left + 1) / 2;
            if(mid * mid > x) // 开long long防溢出
            {
                right = mid - 1;
            }
            else
            {
                left = mid;
            }
        }
        return right;
    }
};

你可能感兴趣的:(每日OJ题,算法,leetcode,c++,二分查找)