leetcode69. x 的平方根,二分法

news2024/9/20 6:41:57

leetcode69. x 的平方根

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:
输入:x = 4
输出:2

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

目录

  • leetcode69. x 的平方根
  • 题目分析
  • 二分法原理与步骤
    • 原理
    • 步骤
    • 应用场景
    • 复杂度分析
    • 注意事项
  • 总体思维导图
  • 算法步骤
  • 算法流程图
  • 算法分析
  • 相似题目

题目分析

这道题目要求我们实现一个函数mySqrt,返回给定整数x的平方根的整数部分。这里的关键是只返回整数部分,不需要考虑小数部分。题目可以通过二分查找的方法来解决,因为平方根具有单调性,即如果midx的平方根,那么比mid小的数不可能是x的平方根,比mid大的数也不可能是x的平方根。

二分法原理与步骤

原理

  1. 有序性假设:二分法适用于已排序的数组或列表。
  2. 范围缩小:通过比较中间元素与目标元素,不断将搜索范围分成两半。
  3. 迭代/递归过程:通过迭代或递归方式实现,每次迭代或递归调用都在更小的范围内搜索。

步骤

  1. 初始化:设定两个指针lowhigh,分别指向数据集的开始和结束位置。
  2. 计算中间位置mid = low + (high - low) / 2
  3. 比较中间元素
    • 如果中间元素等于目标值,搜索成功。
    • 如果中间元素小于目标值,设置low = mid + 1
    • 如果中间元素大于目标值,设置high = mid - 1
  4. 迭代或递归:根据比较结果更新lowhigh,然后重复步骤2和3,直到找到目标元素或low > high

应用场景

  • 用于已排序数据集的快速查找。
  • 如数据库索引、查找算法(如平方根查找)等。

复杂度分析

  • 时间复杂度:O(log n),每次比较将搜索范围减半。
  • 空间复杂度:O(1),只需常数级别额外空间。

注意事项

  • 只适用于有序数据集。
  • 小心处理边界条件,避免死循环或遗漏元素。
  • 计算中间位置时使用low + (high - low) / 2以避免整数溢出。

总体思维导图

在这里插入图片描述

算法步骤

  1. 初始化两个变量ij,分别代表查找范围的下界和上界,初始时i=1j=x
  2. 进行二分查找,计算中间值mid
  3. 检查x/midmid的关系:
    • 如果x/mid等于mid,说明找到平方根,返回mid
    • 如果x/mid大于mid,说明平方根在mid的右侧,将i更新为mid+1
    • 如果x/mid小于mid,说明平方根在mid的左侧,将j更新为mid-1
  4. 重复步骤2和3,直到i大于j
  5. 返回j,即为x的平方根的整数部分。

算法流程图

中点平方等于目标值
中点平方小于目标值
中点平方大于目标值
开始
初始化上下界
计算中点
比较中点平方与目标值
返回中点
更新下界
更新上界
结束

算法分析

  • 时间复杂度:O(logx),因为每次迭代都将搜索范围减半。
  • 空间复杂度:O(1),使用了常数空间。
  • 易错点:在计算mid时,应避免直接使用(i+j)/2,以防止整数溢出。正确的做法是使用i+(j-i)/2
  • 注意点:在判断x/midmid的关系时,应使用整数除法,即x/mid

相似题目

题目链接
69. Sqrt(x)链接
367. Valid Perfect Square链接
441. Arranging Coins链接

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

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

相关文章

培训第二十三天(mysql主从脚本与mysql详细语句介绍)

上午 在同步时,对删除和修改都比较慎重(监控同步时) mysql主从搭建 前提软件libaio,rsync 1、主2、从3、同步4、测试 注意:先执行从服务器的脚本,再执行主服务器脚本 master-mysql配置脚本 先要在主服务…

企元数智小程序合规分销系统赠送:迎接数字化时代商机

当今时代,随着科技的高速发展和数字化的普及,企业如何抓住数字化时代带来的商机,成为了业界关注的焦点。在这样一个竞争激烈的市场环境下,企业需要不断提高自身的竞争力和应变能力,以应对激烈的市场竞争,开…

Phpstorm实现本地SSH开发远程机器(或虚拟机)项目

适用场景: 1、windows系统想要运行仅支持linux、mac系统的项目,可将项目运行在本地虚拟机,但是在虚拟机里使用vim编辑很麻烦,如何实现在本地用Phpstorm来编辑虚拟机中的代码? 下面的说明都是以本地虚拟机为例&#xff…

java之拼图小游戏(开源)

public class LoginJFrame extends JFrame {//表示登录界面,以后所有跟登录相关的都写在这里public LoginJFrame() {//设置界面的长和宽this.setSize(603,680);//设置界面的标题this.setTitle("拼图登陆界面");//设置界面置顶this.setAlwaysOnTop(true);/…

科研绘图系列:R语言圆形条形图(circular barplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 介绍 圆形条形图(circular barplot)是一种条形图,其中的条形沿着圆形而不是线性排列展示。这种图表的输入数据集与普通条形图相同:每个组(一个组即一个条形)需要一个数值。(更多解释请参…

linux文件查找--locate和find命令详解

在文件系统上查找符合条件的文件 文件查找:1.非实时查找(数据库查找):locate2.实时查找: find应用:生产环境中查找到系统中占用磁盘空间较大且时间比较久的大日志文件,对这个较大的日志文件做处理(删除移走等),防止它占用更多的磁…

gps 轨迹点如何绘制路径

作为用户,我们进行户外运动后,有的人喜欢分享自己的运动记录。这个时候就比较关注自己的运动轨迹路线了。 一.将经纬度转化为轨迹方法1 1.将gps 打点文件导出。 2.将经纬度点转换成如下格式。 3.将转换后的经纬度填入如下地址: https://ww…

必了解的 20 个 AI 术语解析(下)

AI 领域的基础概念和相关技术有很多,这篇文章里,作者就深入浅出地介绍了相应的内容,感兴趣的同学们,不妨来看一下。 必了解的 20 个 AI 术语解析(下)© 由 ZAKER科技 提供 本文专为非技术背景的 AI 爱…

如何修改360免费wifi热点的频带为2.4G或者5G

有的时候使用电脑广播出热点给嵌入式设备用进而进行抓包,但是他默认广播的是5G Hz的,嵌入式设备扫不到热点。那么如何让他广播2.4G H在呢? CMD控制台使用命令netsh wlan show drivers查看设备驱动: 802.11g 和 802.11n 意味着你的…

Python酷库之旅-第三方库Pandas(071)

目录 一、用法精讲 286、pandas.Series.dt.to_pydatetime方法 286-1、语法 286-2、参数 286-3、功能 286-4、返回值 286-5、说明 286-6、用法 286-6-1、数据准备 286-6-2、代码示例 286-6-3、结果输出 287、pandas.Series.dt.tz_localize方法 287-1、语法 287-2、…

Selenium 自动化测试最佳实践

1 编码前的准备工作与基本指导思想 测试一个网站就是针对该网站测试场景的一次项目开发,所以项目开发中的理念与思想可以借鉴过来。接到测试需求后,不要一开始就陷入按钮、字段、下拉框等页面元素怎么操作的技术细节当中,而要站在最终用户的…

《MySQL数据库》 可视化工具的使用—/—<3>

一、如何使用可视化工具navicat 1、点击左上角的连接中的MySQL 输入主机地址连接虚拟机,找到自己虚拟机中的ip地址输入即可,连接名随意修改 然后点击测试连接,连接成功即可点击确定 2、新建库 直接鼠标右击连接名称ahao001,点击…

react学习笔记:7

预览:(fetch发送请求、SPA、连续解构赋值、消息订阅、react router路由第三方库) 1、连续解构赋值 总结: 1、连续解构赋值的写法:对象包对象,第二个解构的value一定也是在{}内部的写法 2、消息订阅发布 …

SwiftUI 中 TabView 视图导航栏上按钮丢失问题的解决

问题现象 在某些情况下,SwiftUI 中 TabView 子视图中导航栏上的 ToolbarItem 会消失不见。 如上图所示:在子视图的 Kick Off 导航栏按钮被按下并回退到 TabView 中的主视图之后,其右上角的按钮竟然“神奇”的消失了!该如何解决它呢? 在本篇博文中,您将学到以下内容 问题…

【二分查找】3143. 正方形中的最多点数

本文涉及的基础知识点 C二分查找 LeetCode3143. 正方形中的最多点数 给你一个二维数组 points 和一个字符串 s ,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的 标签 。 如果一个正方形的中心在 (0, 0) ,所有边都平行于坐标轴&…

大数据-Big Data

GPT-4o (OpenAI) 大数据(Big Data)指的是无法使用传统方法和工具在合理的时间内处理和分析的大规模数据集。大数据通常具有以下几种特征,也称为5V特征: 1. Volume(数据量):大数据涉及到大量的信…

深度学习常用语句for param in params问题:为什么修改param之后,params对应元素也随之改变?

def sgd(params, lr, batch_size): #save"""小批量随机梯度下降"""with torch.no_grad():for param in params:param - lr * param.grad / batch_sizeparam.grad.zero_()sgd([w, b], lr, batch_size) 上述代码中,param遍历params的…

深度学习--------------Kaggle房价预测

目录 下载和缓存数据集访问和读取数据集总代码 数据预处理训练K折交叉验证模型选择总代码提交你的Kaggle预测提交Kaggle 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests# download传递的参数分别是数据集的名称、缓存文件夹的路径…

LabVIEW液压传动系统

开发了一种高效的液压传动系统,其特点在于采用LabVIEW软件与先进的硬件配合,实现能量的有效回收。此系统主要应用于工业机械中,如工程机械和船机械等,通过优化液压泵和马达的测试台设计,显著提高系统的能效和操作性能。…

华为OD机试 - 最长子字符串的长度(二) (Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华…