博客
关于我
leetcode—sqrt
阅读量:802 次
发布时间:2023-01-31

本文共 1089 字,大约阅读时间需要 3 分钟。

题目描述

本题要求实现一个函数 int sqrt(int x),用于计算给定整数 x 的整数平方根。该函数需要返回不大于 √x 的最大整数。

解法分析

为了高效地解决这一问题,可以采用二分搜索算法。这种方法的核心思想是通过不断缩小搜索范围来快速找到目标值。以下是详细的实现步骤:

  • 初始化变量

    • 设定 rmin0,表示搜索的下界。
    • 设定 rmaxx / 2,这是一个合理的上界估计。
  • 计算中间值

    • 在每次循环中,计算 rmidrminrmax 的中间值,即 rmid = (rmin + rmax) / 2
  • 检查中间值平方是否等于 x

    • 如果 rmid * rmid 等于 x,则 rmid 就是 x 的平方根,直接返回。
  • 调整搜索范围

    • 如果 rmid * rmid 小于 x,说明 rmid 太小,需要向上调整搜索范围,令 rmax = rmid + 1
    • 如果 rmid * rmid 大于 x,说明 rmid 太大,需要向下调整搜索范围,令 rmin = rmid + 1
  • 返回结果

    • 当搜索结束后,rmin 会接近 rmax,此时返回 rmin 即可得到整数平方根。
  • 代码实现

    int sqrt(int x) {    if (x < 0) return -1;    if (x < 4) return x > 0 ? 1 : 0;        long long rmin = 0;    long long rmax = x / 2;        while (rmin <= rmax) {        long long rmid = (rmin + rmax) / 2;        if (rmid * rmid == x) return rmid;        if (rmid * rmid < x) rmax = rmid + 1;        else rmin = rmid + 1;    }        return (int)rmin;}

    代码解释

    • 边界条件处理:首先检查 x 的值。如果 x 为负数,直接返回 -1。对于小于 4 的正数,直接返回其平方根。
    • 二分搜索:通过初始化 rminrmax,然后在 while 循环中不断调整搜索范围,计算中间值 rmid
    • 平方检查:根据 rmid 的平方与 x 的关系,调整搜索范围,最终找到最大的整数平方根。
    • 返回结果:循环结束后,返回 rmin 作为整数平方根。

    这种方法的时间复杂度为 O(log x),在保证正确性的同时,能够高效地完成平方根计算。

    转载地址:http://fqgyk.baihongyu.com/

    你可能感兴趣的文章
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    Openlayers实战:modifystart、modifyend互动示例
    查看>>
    Openlayers实战:判断共享单车是否在电子围栏内
    查看>>
    Openlayers实战:加载Bing地图
    查看>>
    Openlayers实战:绘制图形,导出geojson文件
    查看>>
    Openlayers实战:绘制图形,导出KML文件
    查看>>
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    查看>>