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

【C++算法】20.二分查找算法_x 的平方根

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:
    • 图解


题目链接:

69. x 的平方根


题目描述:

58fff4194bf96524fed0310c67f388c4


解法

暴力解法:

如果x=17

1,2,3,4,5......这些数里面找他们的平方,16<x<25,所以整数部分是4

二段性:

5187d4c58a42e8f941cba9b8161d6040

可以使用二分查找

428e21dace0b6ca51aea89f6957b0c90

需要注意:0 <= x <= 231 - 1

也就意味着x是可以比1小的,但这个时候直接就是0了。


C++ 算法代码:

暴力查找

class Solution {
    public:
    int mySqrt(int x) {
        // 由于两个较大的数相乘可能会超过 int 最大范围
        // 因此用 long long
        long long i = 0;
        for (i = 0; i <= x; i++)
        {
            // 如果两个数相乘正好等于 x,直接返回 i
            if (i * i == x) return i;
            // 如果第一次出现两个数相乘大于 x,说明结果是前一个数
            if (i * i > x) return i - 1;
        }
        // 为了处理oj题需要控制所有路径都有返回值
        return -1;
    }
};

二分查找

class Solution 
{
    public:
    int mySqrt(int x) 
    {
        if(x < 1) return 0; // 处理边界情况
        int left = 1, right = x; //从1-x二分
        while(left < right)
        {
            long long mid = left + (right - left + 1) / 2;
            if(mid * mid <= x) left = mid;
            else right = mid - 1;
        }
        return left;
    }
};

图解

例如:x=8

  1. left=1,right=8

    进入循环,mid=1+(8-1+1)/2=1+4=5

  2. left=1,right=4

    进入循环,mid=1+(4-1+1)/2=1+2=3

    right = mid - 1=2

  3. left=1,right=2

    进入循环,mid=1+(2-1+1)/2=1+1=2

    mid * mid <= x,left = mid=2

  4. left=2,right=2,不满足循环条件,return left;返回2


http://www.kler.cn/a/416342.html

相关文章:

  • 搭建私有云存储
  • springboot337校园失物招领系统pf(论文+源码)_kaic
  • MaxComputer(Odps)转换TimeStamp与DateTime为字符串
  • 【反转链表】力扣 445. 两数相加 II
  • Oracle 的查询优化器
  • getent 命令详解:系统数据库查询利器
  • Python函数内部与函数外部执行相同语句的显存区别
  • OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位
  • Clean Docker Images and Container by Cron Job
  • 两个用来刷新Windows环境变量让会话即时生效的刷新脚本分享
  • 16.最接近的三数之和 python
  • 优维HAO案例:全球TOP15汽车零件供应商「IT运维自动化」创新工程
  • 组件A底部栏(position: fixed )事件使用$emit更新内容失败bug解决
  • 【数据湖仓】-- 阿里云 dataworks 和 AWS Glue 数据治理工具对比
  • 虚拟机ubuntu-20.04.6-live-server搭建OpenStack:Victoria(五:OpenStack环境准备-compute node)
  • C++设计模式(模板模式)
  • AOA定位算法,平面上的angle of arrive定位算法与MATLAB实现
  • 【c++篇】:解读Set和Map的封装原理--编程中的数据结构优化秘籍
  • “岗位复合化、技能层次化” 高职大数据技术专业人才培养实践
  • MySQL8.0 双密码机制:解决应用程序用户不停机修改密码问题