每日一题(LeetCode)----二分查找(三)

每日一题(LeetCode)----二分查找(三)

1.题目(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

2.解题思路

思路一: 二分

利用二分的思想,二分的范围最开始就是从0开始到目标数结束

然后我们进行二分,如果我们找到的数的平方比目标数小,那么我们的答案为当前找到的数,然后二分范围的左边界找到的当前数右边的位置,继续进行二分

如果我们如果我们找到的数的平方比目标数大,那么二分范围的右边界变为找到的当前数左边的位置,继续进行二分

直到左边界比右边界大了,结束操作

思路二: 袖珍计算器算法(来源于牛客官方解答)

思路三: 牛顿迭代(来源于牛客官方解答)

3.代码

思路一的代码:

c++ 复制代码
class Solution {
public:
    int mySqrt(int x) {
        int left=0;
        int right=x;
        int ans=-1;
        while(left<=right){
            long long mid=left+(right-left)/2;
            if(mid*mid<=x){
                ans=mid;
                left=mid+1;
            }
            if(mid*mid>x){
                right=mid-1;
            }
        }
        return ans;
    }
};

思路二的代码:

c++ 复制代码
class Solution {
public:
    int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }
        int ans = exp(0.5 * log(x));
        return ((long long)(ans + 1) * (ans + 1) <= x ? ans + 1 : ans);
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/sqrtx/
来源:力扣(LeetCode)

思路三的代码:

c++ 复制代码
class Solution {
public:
    int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }

        double C = x, x0 = x;
        while (true) {
            double xi = 0.5 * (x0 + C / x0);
            if (fabs(x0 - xi) < 1e-7) {
                break;
            }
            x0 = xi;
        }
        return int(x0);
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/sqrtx/
来源:力扣(LeetCode)
相关推荐
weixin_468466851 分钟前
排列组合算法之隔板问题与错排公式
c++·算法·数学建模·排列组合·竞赛·错排·隔板
wsoz11 分钟前
Leetcode链表-day9
c++·算法·leetcode·链表
Lumos_77733 分钟前
Linux -- 系统调用
linux·运维·算法
一个行走的民1 小时前
深度剖析 Ceph PG 分裂机制:原理、底层、实操、影响、线上避坑(最全完整版)
ceph·算法
WolfGang0073211 小时前
代码随想录算法训练营 Day46 | 图论 part04
算法·图论
拾-光1 小时前
LTX-Video 2.3 实战:用图片生成视频,消费级显卡也能跑的开源 I2V 模型(GPT Image 2)
java·人工智能·python·深度学习·算法·机器学习·音视频
小O的算法实验室1 小时前
2026年ESWA,考虑曲率约束路径优化的 Dubins-RRT* 运动规划算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
jllllyuz1 小时前
灰狼算法优化的LSSVR程序
算法
杨校1 小时前
杨校老师课堂之栈结构的专项训练
算法
故事和你911 小时前
洛谷-算法2-2-常见优化技巧3
开发语言·数据结构·c++·算法·深度优先·动态规划·图论