当前位置: 首页 > news >正文

3.4 二分查找专题:LeetCode 69. x 的平方根

1. 题目链接

LeetCode 69. x 的平方根


2. 题目描述

给定一个非负整数 x,计算并返回 x 的平方根的整数部分(向下取整)。
示例

  • 输入:x = 4 → 输出:2
  • 输入:x = 8 → 输出:2(实际平方根为 2.828,取整数部分)。

3. 示例分析
  1. 目标值是完全平方数
    • x = 16 → 返回 4
  2. 目标值非完全平方数
    • x = 10 → 返回 33^2 = 9 ≤ 104^2 = 16 > 10)。

4. 算法思路

二分查找法

  1. 初始化指针left = 1right = x(处理 x = 0 的特殊情况直接返回 0)。
  2. 循环缩小范围
    • 计算中间值 mid = left + (right - left + 1) / 2向上取整,避免死循环)。
    • mid * mid ≤ x,说明目标在右半区间,调整 left = mid
    • mid * mid > x,说明目标在左半区间,调整 right = mid - 1
  3. 终止条件:当 left == right 时,返回 left(最大满足 k^2 ≤ x 的整数)。

5. 边界条件与注意事项
  1. 处理 x < 1:直接返回 0,避免进入循环。
  2. 溢出问题:中间值 mid 使用 long long 类型,防止 mid * mid 溢出。
  3. 循环终止条件:必须使用 mid向上取整,否则可能陷入死循环(例如 x = 2)。

6. 代码实现
class Solution 
{
public:
    int mySqrt(int x) 
    {
        if(x < 1) return 0;
        int left = 1, right = x;
        while(left < right)
        {
            long long mid = left + (right - left + 1) / 2;
            if(mid * mid <= x) left = mid;
            else right = mid - 1;
        }
        return left;
    }
};

在这里插入图片描述


暴力枚举法与二分查找法对比图表

对比维度暴力枚举法二分查找法
核心思想遍历 0√x,找到最大的 k 满足 k² ≤ x二分法缩小范围,定位最大满足 k² ≤ x 的整数。
时间复杂度O(√x)(需要遍历最多 √x 次)。O(log x)(每次将搜索范围缩小一半)。
空间复杂度O(1)(无需额外存储)。O(1)(仅需常数变量记录指针)。
实现方式单层循环逐个判断。循环调整左右指针,计算中间值并比较。
适用场景极小数据规模(x ≤ 1e3)。任意规模数据(尤其适合 x ≥ 1e6)。
优点实现简单,无需处理复杂边界条件。时间复杂度极低,适合处理大规模数据。
缺点数据规模大时性能极差(例如 x=1e18 时需 1e9 次操作)。需处理整数溢出和中间值取整逻辑。

相关文章:

  • TCP、UDP协议的应用、ServerSocket和Socket、DatagramSocket和DatagramPacket
  • 查询修改ORACLE的server、客户端和导出dmp文件 字符集编码
  • SpringBoot-2整合MyBatis以及基本的使用方法
  • 大模型学习-让其他电脑可访问本地ollama的模型并进行流式响应
  • AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)
  • 【ELK】节省存储 之 压缩存储方式调整
  • element-ui image 组件源码分享
  • cls(**dict(data, id=id))灵活地从一个字典生成实例,同时确保某些关键字段(如 id)被正确设置或覆盖
  • 问deepseek: 如何用CUDA实现PBiCGSTAB稀疏矩阵迭代算法,写段示例代码
  • OLE注册是什么?
  • 博客图床 VsCode + PicGo + 阿里云OSS
  • $.ajax的contentType设置及对应后端数据获取方式
  • ViT、DETR 和 Swin Transformer :基于 Transformer 的计算机视觉(CV)模型
  • vmware tools灰化
  • Unity打包的WebGL包打不开问题解决方案,以及WebGL包嵌入至Vue2中的步骤
  • QT程序双击可执行文件运行方法
  • vue3 引入element-plus组件后,发现输入的时候没有提示,而且鼠标移到el-button显示unknown的简单解决方法
  • 【谷粒商城踩坑记】第四坑 nacos 闪退问题
  • python 库笔记:pytorch-tcn
  • vue的绑定
  • 匈牙利国会通过退出国际刑事法院的决定
  • “85后”潘欢欢已任河南中豫融资担保有限公司总经理
  • 诗词文赋俱当歌,听一听古诗词中的音乐性
  • 上海数学教育及数学科普专家陈永明去世,享年85岁
  • 中国纪检监察报刊文:要让劳动最光荣成为社会的崇高风尚
  • 十大券商看后市|A股风险偏好有望边际改善,市场仍处黄金坑