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

【LeetCode算法】第69题:x的平方根

目录

一、题目描述

二、初次解答

三、官方解法

四、总结


一、题目描述

二、初次解答

1. 思路:第一次想到的是让i从1开始遍历,看i*i==x是否成立,但是这样就会导致i*i超出了int的范围,无法正常求解。第二次,想着比较x/i与i的绝对值是否小于等于1,是的话x/i与i的最小值就是x的平方因数。虽然第二次这种方法可行,但是速度就很慢(以下代码就是第二次想到的方法)。第三次,想到提升查找效率能否使用二分查找,但是二分查找中间值时比较中间值的平方与x也会超出int界限,因此无从下手。结果,官方给出的二分查找中计算i*i时强转为long long,这样其他计算的数据都会自动类型提升至long long,就避免了超出int的局限性。但是如果未来遇到更大的数据类型时岂不是仍然不行。

2. 代码:

int mySqrt(int x) {int i = 1;while (1){int ret = x / i;if (ret == i || ret == i - 1 || ret == i + 1) {return ret > i ? i : ret;} else {++i;}}
}

3. 优点:容易想到,代码简单。

4. 缺点:因为每次都从1开始,执行速度非常慢。

三、官方解法

1. 思路:牛顿迭代法,可以快速求解函数零点问题f(x)=0。任取一个xi,通过牛顿迭代法获得xi+1,更接近函数零点。牛顿迭代法的实现与原理如下图所示:

2. 代码:

int mySqrt(int x) {if (x == 0)return 0;double x0 = x;while (1){double xi = (x0 + x / x0) / 2;if (fabs(xi - x0) < 1e-7)break;x0 = xi;}return x0;
}

3. 优点:运行速度快。

4. 缺点:第一次难以想到。

四、总结

遇到代数方程难以求解时,将其转换为函数零点问题,用牛顿迭代法求解。

相关文章:

  • linux mail命令及其历史
  • 免费开源人脸识别系统,支持RESTful API
  • 【Unity】常用的全局类
  • 02-结构型设计模式(共7种)
  • 油猴脚本使用cookie一般是某请求返回的setcookie,一般不是js生成的,直接请求拼接
  • C# 基础之字典——Dictionary(一)
  • QVariant用法(AI ChaptGPT)
  • 【设计模式深度剖析】【4】【创建型】【建造者模式】| 类比选购汽车的过程,加深理解
  • ubuntu设置root开机登录,允许root用户ssh远程登录
  • 大模型落地竞逐,云计算大厂“百舸争流”
  • 【MySQL精通之路】InnoDB(7)-锁和事务模型(2)-事务模型
  • MQTT 异常断开(一)
  • 网络模型-Qinq配置与应用
  • 每日5题Day5 - LeetCode 21 - 25
  • jiebaNET中文分词器
  • [译]Python中的类属性与实例属性的区别
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Java读取Properties文件的六种方法
  • js算法-归并排序(merge_sort)
  • node和express搭建代理服务器(源码)
  • node入门
  • Object.assign方法不能实现深复制
  • React as a UI Runtime(五、列表)
  • spark本地环境的搭建到运行第一个spark程序
  • Vue学习第二天
  • 对超线程几个不同角度的解释
  • 基于遗传算法的优化问题求解
  • python最赚钱的4个方向,你最心动的是哪个?
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​一些不规范的GTID使用场景
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1) caustics\
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (13)Hive调优——动态分区导致的小文件问题
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (3)选择元素——(17)练习(Exercises)
  • (4.10~4.16)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (PADS学习)第二章:原理图绘制 第一部分
  • (初研) Sentence-embedding fine-tune notebook
  • (二)斐波那契Fabonacci函数
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (黑马点评)二、短信登录功能实现
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (转)Google的Objective-C编码规范
  • (转)为C# Windows服务添加安装程序
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net和php怎么连接,php和apache之间如何连接
  • .NET连接数据库方式
  • @ModelAttribute注解使用