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

embedded/2024/9/23 5:12:27/

个人主页: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/embedded/115425.html

相关文章

摆脱困境并在 Android 手机上取回删除照片的所有解决方案

没有什么比不小心从 Android 智能手机中删除所有照片更糟糕的了。这样&#xff0c;除非您在重置之前已经备份了数据&#xff0c;否则您的所有照片都会消失。如果您忘记备份照片&#xff0c;您仍然可以按照一些简单的技术在 Android 设备上恢复已删除的照片。 您的 Android 智能…

【Git】Git 打标签详解

目录 一、标签的基本概念二、如何打标签2.1 创建轻量标签2.2 创建附注标签 三、查看标签四、推送标签到远程五、删除标签5.1 本地标签5.2 远程标签 六、标签的常见场景七、可能出现的问题及解决方案7.1 标签未推送到远程7.2 标签冲突7.3 查看标签信息不全 总结 在使用 Git 进行…

如何使用 Helm 2 软件包管理器在 Kubernetes 集群上安装软件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Helm 是 Kubernetes 的一个包管理工具&#xff0c;允许开发人员和运维人员更轻松地在 Kubernetes 集群上配置和部署应用程序。 在…

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级&#xff0c;手写实现一个微服务熔断限流器 服务雪崩熔断、限流、降级熔断降级限流 手写实现一个微服务熔断限流器架构设计代码实现整体逻辑ProtectorAspect#aroundMethod(ProceedingJoinPoint)具体实现1、获取接口对…

经典sql题(六)查找用户每月累积访问次数

使用聚合开窗查找用户每月累积访问次数&#xff0c;首先介绍一下使用 GROUP BY和开窗的区别 GROUP BY 行数变化&#xff1a;使用 GROUP BY 后&#xff0c;原始数据会按指定列进行分组&#xff0c;结果中每组只保留一行&#xff0c;因此行数通常减少。作用&#xff1a;适用于需…

Android——内部/外部存储

Android 内部存储 与宿主 App 的生命周期相同&#xff0c;应用卸载时&#xff0c;会被系统自动删除。宿主 App 可以直接访问&#xff0c;无需权限。其他应用无权访问。用户访问需 Root 权限。适合存储与应用直接相关&#xff0c;隐私性或敏感性高的数据。 主要API getDataDi…

Webshell机制绕过的个人理解总结

Webshell是指我们上传到网站的一些恶意后门程序或代码注入&#xff0c;这些Webshell能够使我们获得对网站的远程控制。而Webshell的核心就是那些危险函数&#xff0c;即系统命令执行函数和代码执行函数 常见的系统命令执行函数有system()&#xff0c;exec()&#xff0c;shell_…

无服务器计算构建人工智能管理区块链系统

图片发自简书App 图片发自简书App 本发明属于网络版权管理技术领域&#xff0c;特别涉及一种以交易信息作 为唯一标准发行虚拟币的区块链系统。 背景技术 数字代币如比特币、以太坊等是区块链技术的实现方式之一&#xff0c;目 标是取代法定货币流通&#xff0c;通过“挖矿”的…