二分查找算法(3) _x的平方根

news/2024/9/29 1:26:22/

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

二分查找算法(3) _x的平方根

收录于专栏【经典算法练习】
本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌

目录

温馨提示:

1. 题目链接:

2. 题目描述 :

3. 解法 (二分查找):

算法思路:

代码展示:

结果分析:

4. 二分算法模板总结


温馨提示:

这道题是直接使用了二分模板,轻松拿捏了这道题,如果你还不知道的话,自行去下篇博客

---二分查找算法(2) _在排序数组中查找元素的第一个和最后一个_模板-CSDN博客

1. 题目链接:

OJ链接: x的平方根

2. 题目描述 :

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

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

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

示例 1:

输入:x = 4
输出:2

示例 2:

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

提示:

  • 0 <= x <= 231 - 1

3. 解法 (二分查找):

算法思路:

设x的平方根的最终结果为index

分析index左右两次数据的特点:

        [1, index]之间的元素, 平方和之后都是小于等于x的;

        [index + 1, x]之间的元素, 平方之后都是大于x的

因此可以使用二分查找算法

代码展示:

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;}
};

 

结果分析:

这个算法实现了求一个非负整数x 的平方根,采用了二分查找法。以下是分析:

1. 初始化:当x < 1 时,直接返回 0。否则,初始化 left 为 1,right 为x。

2. 二分查找:

    使用 while (left < right) 循环,确保在 left 和 right 之间进行查找。
    计算中间值 mid,并使用 long long 来避免溢出。
    如果 mid* mid 小于或等于x,则将 left 移动到 mid,表示可能的平方根在右半边。
    否则,将 right 移动到 mid - 1,表示平方根在左半边。

3. 返回值:最后返回 left,它是x 的整数平方根。

   

优点:
    时间复杂度:O(log x),效率高。
    准确性:通过调整 left 和 right,能准确找到最大的整数平方根。

4. 二分算法模板总结

这里再次强调一下我们的二分算法模板(真的很好用!!!)

while(left < right){int mid = left + (right - left) / 2;if(...) left = mid + 1;else right = mid;
}while(left < right){int mid = left + (right - left + 1) / 2;if(...) left = mid;else right = mid - 1;
}

快速记忆:

分类讨论的代码,就题论题即可

下面出现-1,上面就+1,否侧不加


http://www.ppmy.cn/news/1531392.html

相关文章

浅析Android中的View事件分发机制

Android事件分发机制浅析 基础概念源码分析事件分发流程事件处理流程 思路借鉴 基础概念 触摸事件&#xff1a;手指触摸屏幕时生成的事件&#xff0c;即MotionEvent。常见的触摸事件有&#xff1a;ACTION_DOWN、ACTION_MOVE、ACTION_UP以及ACTION_CANCEL&#xff0c;当存在多个…

PHP基础语法讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; PHP&#xff08;Hypertext Preprocessor&#xff09;是一种常用于网页开发的服务器端脚本语言&#xff0c;易于学习并且与 HTML 紧密结合。以下是 PHP 的基础语法详细讲解。 1. PHP 基础结构 1.1 PHP 脚本结…

这些主流的财务管理软件,你用过哪款?

在当今的商业环境中&#xff0c;财务管理面临着诸多棘手的痛点问题&#xff1a; 数据的准确性与及时性难以保证&#xff0c;手工录入易出错且数据更新常不及时&#xff1b; 预算管理困难重重&#xff0c;编制不合理且执行监控难&#xff1b; 财务风险管控不足&#xff0c;应…

【高分系列卫星简介——高分一号卫星(GF-1)】

高分一号卫星&#xff08;GF-1&#xff09; 高分一号&#xff08;GF-1&#xff09;是中国高分辨率对地观测系统&#xff08;简称“高分专项”&#xff09;的第一颗卫星&#xff0c;具有里程碑式的意义。以下是对高分一号卫星的详细介绍&#xff1a; 一、基本信息 发射时间&…

虚拟机开启网络代理设置,利用主机代理访问国外资源

前言 有时候需要访问一些镜像网站拉取安装包或是学习资料&#xff0c;由于国内外网络环境差异和网络安全的问题&#xff0c;总会被阻拦。下文来说一下虚拟机centos7如何通过连接主机的代理软件。 一、代理软件设置 1、前提是主机要安装有代理软件&#xff0c;查看代理软件的…

面经 | 手写

经典手写题目 手写call apply bindcallapplybind手写call apply bind call 其实应该考虑没有传入context的情况,但面试考点一般不在这儿.所以,这里就直接写核心Function.prototype.myCall=function(context){let args=[

Linux驱动开发(速记版)--高级字符设备进阶

第二十四章 IO 模型引入 24.1 IO 的概念 IO是计算机系统内外数据交换过程&#xff0c;冯诺依曼架构下各部件协同工作。用户输入&#xff0c;CPU处理&#xff0c;结果输出。磁盘IO是内存与磁盘数据交换的核心&#xff0c;对信息交互至关重要。 24.2 IO 执行过程 Linux操作系统…

基于SSM+小程序的医院挂号登录管理系统(医院4)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本医院挂号系统小程序可以实现患者管理&#xff0c;医生管理&#xff0c;科室管理&#xff0c;专家信息管理&#xff0c;预约信息管理&#xff0c;取消预约申请管理&#xff0c;系统管理等…