leetcode:69. x 的平方根

news2025/1/11 18:41:36

一、题目

函数原型:int mySqrt(int x)

二、思路

        利用二分查找思想,在0与x区间进行查找。

        设置左边界 left (初始值为0),右边界 right(初始值为x)和中值 mid (值为区间的中间值),同时设置一个ans(初始值为-1)作为最终返回值。

        设置循环,循环条件为 left<=right。每次进入循环,通过中值mid的平方与x进行比较确定x的平方根在中值左区间还是右区间或是mid即为x的平方根。mid平方小于x则说明平方根在中值左区间,大于x则说明平方根在中值右区间。

        每次进入循环,先更新一下mid的值,然后再进行比较判断确定平方根所在区间。将平方根在左区间和平方根刚好等于mid的情况合并。如果平方根在左区间或平方根刚好等于mid,则更新区间并将mid的值赋值给ans;如果平方根在右区间,则只更新区间。

最终循环结束后,返回ans。

关键1:中值mid值如何求?

mid = left +(right - left)/ 2

关键2:为什么循环条件是 left<=right ?

只有当left <= right 时,才能保证要求的平方根在区间内。left = right 时也算一个区间,只不过该区间只有一个值。

关键3:为什么只有当mid的平方小于等于x时才将mid的值赋给ans?

当mid的平方等于x时,将mid的值赋给ans毋庸置疑。当mid的平方小于x时,将mid的值赋给ans,是因为在循环中可能会出现所求平方根的精确值在两个相邻整数之间,此时mid的值时较小的整数,我们要求的粗略值也是较小的整数,因此mid的值就是我们要求的ans值。

关键4:为什么mid的平方需要强制类型转换?

因为题目提示部分显示x<=2^31-1,数据较大,int类型可能能存放不下,需要用long long类型存储。

int mySqrt(int x) 
{
	int left = 0;
	int right = x;
	int mid = left + (right - left) / 2;
	int ans = -1;

	while (left <= right)
	{
		mid = left + (right - left) / 2;
		if ((long long)mid * mid <= x )
		{
			left = mid + 1;
			ans = mid;
		}
		else if ((long long)mid * mid > x )
		{
			right = mid - 1;
		}
	}
	return ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VCP-DCV VMware vSphere:安装、配置和管理[V8.x]

VMware官方授权合作活动&#xff0c;全国招生&#xff01; VCP-DCV VMware vSphere&#xff1a;安装、配置和管理[V8.x] 课程名称&#xff1a;VMware vSphere安装、配置和管理[V8.x] 培训课时&#xff1a;40课时 培训天数&#xff1a;5天 课程介绍&#xff1a;本课程重点讲…

MySQL优化技巧:提升数据库性能

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

盐碱地改良通用技术 铁尾砂改良学习

声明 本文是学习GB-T 42828.1-2023 盐碱地改良通用技术 第1部分&#xff1a;铁尾砂改良. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了铁尾砂改良盐碱地技术的技术原理&#xff0c;规定了技术要求、田间管理和效果评价。 本文…

计算机d3dx9_43.dll丢失怎么解决,简单的5个解决方法分享

在当今这个高度依赖计算机技术的时代&#xff0c;我们的生活和工作都离不开各种软件的支持。然而&#xff0c;有时候我们可能会遇到一些棘手的问题&#xff0c;比如计算机中的某个dll文件丢失&#xff0c;导致程序无法正常运行。最近&#xff0c;我就遇到了这样一个问题&#x…

无涯教程-JavaScript - TRANSPOSE函数

描述 TRANSPOSE函数将单元格的垂直范围作为水平范围返回,反之亦然。必须将TRANSPOSE函数作为数组公式输入,该范围必须具有与行范围和列范围相同的行和列数。 您可以使用TRANSPOSE在工作表上移动数组或范围的垂直和水平方向。 语法 TRANSPOSE (array)键入函数后,按CTRL SHI…

【计算机视觉】Vision Transformers算法介绍合集(二)

文章目录 一、Transformer in Transformer二、Bottleneck Transformer三、Pyramid Vision Transformer v2四、Class-Attention in Image Transformers五、Co-Scale Conv-attentional Image Transformer六、XCiT七、Focal Transformers八、CrossViT九、ConViT十、CrossTransform…

【C++】map,set简单操作的封装实现(利用红黑树)

文章目录 一、STL中set与map的源码二、 红黑树结点的意义三、仿函数的妙用四、set&#xff0c;map定义迭代器的区别五、map&#xff0c;set迭代器的基本操作&#xff1a;1.begin&#xff08;&#xff09; end&#xff08;&#xff09;2.operator3.operator-- 六、迭代器拷贝构造…

A Framework to Evaluate Fusion Methods for Multimodal Emotion Recognition

题目A Framework to Evaluate Fusion Methods for Multimodal Emotion Recognition译题一种评估多模态情感识别融合方法的框架时间2022年仅用于记录学习&#xff0c;不作为商用 一种评估多模态情感识别融合方法的框架 摘要&#xff1a;情绪识别的多模态方法考虑了预测情绪的几…

2023/9/17周报

摘要 本周阅读了两篇论文&#xff0c;其一为一种基于空气质量时频域特征提取的hybrid预测方法&#xff0c;另一篇为基于烛台与视觉几何群模型的 PM2.5 变化趋势特征提取与分类预测方法。在第一篇文章中&#xff0c;通过小波变化&#xff0c;对数据进行分频&#xff0c;并设计了…

详解3dMax中渲染线框的两种简单方法

在3dMax中渲染线框是你在某个时候想要完成的事情&#xff0c;例如为了演示分解步骤&#xff0c;或是仅仅为了在模型上创建线框覆盖的独特效果。为三维模型渲染线框最常见的原因是能够在模型上显示干净的拓扑。这篇文章将带你了解在3dMax中渲染三维模型线框的两种最常见、最简单…

太炫酷,3分钟学会,视频倒放技能

一&#xff0c;视频倒放 视频倒放是一种有趣的视频编辑技术&#xff0c;可以为您的视频带来一些特殊的效果。通过倒放视频&#xff0c;您可以实现以下效果&#xff08;如果有其它需要的软件和技术&#xff0c;可以私信小编&#xff1b;更多精彩可关注微信公众号&#xff1a;黑…

推荐一个高质量专栏:「前端面试必备」

文章目录 专栏作者介绍专栏介绍目录&#xff08;前25篇&#xff09;目录&#xff08;后25篇&#xff09;专栏文章部分摘抄JavaScriptVue网络请求和HTTPNode.jswebpackBabelVite微信小程序Vuexuni-appGitECharts前端工程化 写在结尾 专栏作者介绍 &#x1f90d; 前端开发工程师&…

DT Paint Effects工具(三)

管 分支 使用细枝 叶 力 使用湍流 流动画 渲染全局参数 建造盆栽植物

Ubuntu 22.04安装过程

iso下载地址 Ubuntu Releases 1.进入引导菜单 选择Try or Install Ubuntu Server安装 2.选择安装语言 默认选择English 3.选择键盘布局 默认即可 4.选择安装服务器版本 最小化安装 5.配置网络 选择ipv4 选择自定义 DHCP也可 6.配置代理 有需要可以配置 这里跳过 7.软件源 …

「UG/NX」Block UI 指定轴SpecifyAxis

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

第9关:生成器与 yield

任务描述 Python 中存在着一个特殊的函数:生成器。生成器是一个“函数对象”&#xff0c;它与函数的定义在形式上完全相同&#xff0c;具有“函数名”与“参数列表”&#xff0c;不同之处在于它可以以yield方式“暂时返回”。 本关的任务是让学习者掌握 Python 中生成器的使用…

onnxruntime(c++)

https://huaweicloud.csdn.net/63807fb7dacf622b8df89158.htmlhttps://huaweicloud.csdn.net/63807fb7dacf622b8df89158.html基于onnxruntime的C版本CPU/GPU源码编译_三横先生的博客-CSDN博客_onnxruntime gpu c基于onnxruntime的C版本CPU/GPU源码编译提示&#xff1a;基于onnx…

位图原理及实现

位图原理及实现 位图概念位图实现构造函数set成员函数reset成员函数test成员函数 位图的应用 位图概念 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 对于上面这道题大多数人都会想到用遍历和二分查找…

什么是Webpack的Tree Shaking?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Webpack的Tree Shaking⭐ 作用和原理⭐ 使用 Tree Shaking⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感…

2023年免疫细胞治疗行业研究报告

第一章 行业概况 1.1 定义及分类 免疫细胞治疗是细胞治疗的一种重要分支&#xff0c;它涉及对免疫细胞进行体外操作&#xff0c;然后将其回输到人体内&#xff0c;以实现对肿瘤细胞的杀伤或清除病毒等功能。这种治疗方法的核心是利用免疫细胞的自然功能&#xff0c;通过体外技…