leetcode 69 x 的平方根 牛顿迭代法
简介
简单的题, 直接上代码.
其实还挺复杂的.
参考链接
https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/
code
class Solution {
public:
int mySqrt(int x) {
return sqrt(x);
}
};
class Solution {
public int mySqrt(int x) {
return (int)Math.sqrt(x);
}
}
袖珍计算器法
其实是数学推导, 其实我还没怎么用过exp来进行计算和log
\]
class Solution {
public:
int mySqrt(int x) {
if(x == 0) {
return 0;
}
int ans = exp(0.5 * log(x));
return ((long long)(ans + 1) * (ans + 1) <= x ? ans + 1 : ans);
}
};
二分查找
class Solution {
public:
int mySqrt(int x) {
int l = 0, r = x, ans = -1;
while (l <= r) {
int mid = l + (r - l) / 2;
if ((long long)mid * mid <= x) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
};
牛顿法
牛顿迭代法本质上是使用了泰勒级数的思想, 不过, 我不是特别清楚. 但是, 看了图片, 可知还是比较清晰的. 可以看参考链接

看了代码我们有了更深刻的理解
其实我们构建了一个函数
\]
其中\(C\)的初值设定为 输入的数 \(x_0\)
如果要这个方程\(f(x_0) == 0\) 的话, 其解 \(x_{解} = \sqrt{x_0}\)
然后我们又构建了一个直线函数求\(f(x)\)求导后的直线与\(y = 0\)的交点, 当两次的点的变化很接近的时候,就是我们想要的解的范围.
class Solution {
public:
int mySqrt(int x) {
if(x == 0) {
return 0;
}
double C = x, x0 = x;
while(true){
double xi = 0.5 * (x0 + C/x0);
if(fabs(x0 - xi) < 1e-7){
break;
}
x0 = xi;
}
return int(x0);
}
};
leetcode 69 x 的平方根 牛顿迭代法的更多相关文章
- [LeetCode]69. x 的平方根(数学,二分)
题目 https://leetcode-cn.com/problems/sqrtx 题解 方法一:牛顿迭代法 按点斜式求出直线方程(即过点Xn,f(Xn)),然后求出直线与x轴交点,即为Xn+1: 求 ...
- Java实现 LeetCode 69 x的平方根
69. x 的平方根 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...
- [leetcode] 69. x 的平方根(纯int溢出判断实现)
69. x 的平方根 非常简单的一个题,用二分法逼近求出ans即可,额外注意下溢出问题. 不过我要给自己增加难度,用long或者BigNum实现没意思,只能使用int类型 换句话当出现溢出时我们自己得 ...
- LeetCode 69 x 的平方根
链接:https://leetcode-cn.com/problems/sqrtx 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数, ...
- 字节笔试题 leetcode 69. x 的平方根
更多精彩文章请关注公众号:TanLiuYi00 题目 解题思路 题目要求非负整数 x 的平方根,相当于求函数 y = √x 中 y 的值. 函数 y = √x 图像如下: 从上图中,可以看出函数是单 ...
- C++版 - Leetcode 69. Sqrt(x) 解题报告【C库函数sqrt(x)模拟-求平方根】
69. Sqrt(x) Total Accepted: 93296 Total Submissions: 368340 Difficulty: Medium 提交网址: https://leetcod ...
- [LeetCode] 69. Sqrt(x) 求平方根
Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a no ...
- 牛顿迭代法的理解与应用( x 的平方根)
题目来源与LeetCode算法题中的第69题,具体内容如下(点击查看原题): 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只 ...
- sqrt()平方根计算函数的实现2——牛顿迭代法
牛顿迭代法: 牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特 ...
- 141. Sqrt(x)【牛顿迭代法求平方根 by java】
Description Implement int sqrt(int x). Compute and return the square root of x. Example sqrt(3) = 1 ...
随机推荐
- jmeter之请求体类型
一.当post方法的提交数据类型(content-type)为multipart/form-data,请求体为文件文件上传. fiddler抓包请求体的name对应jmerter文件上传的参数名称,f ...
- Ubuntu修改密码及密码复杂度策略设置方法
版本查看 cat /etc/issue cat /proc/version 内核查看 uname -a Ubuntu修改密码及密码复杂度策略设置方法 一.修改密码 1.修改普通用户密码 passwd ...
- mysql免密登录
开启mysql免密登录, vi /etc/my.cnf [mysqld]下添加 skip-grant-tables , 保存后重启mysql服务:service mysqld restart
- 漏洞预警 | WordPress Plugin Radio Player SSRF漏洞
0x00 漏洞编号 CVE-2024-54385 0x01 危险等级 高危 0x02 漏洞概述 WordPress插件Radio Player是一种简单而有效的解决方案,用于将实时流媒体音频添加到您的 ...
- Redis 连接池耗尽的一次异常定位
转载请注明出处: 最近在项目中遇到一个奇怪的现象,项目运行环境中的redis在业务运行中,一直没有更新redis的值,在服务的日志中也没有看到相关的异常,导致服务看起来正常,但和redis相关的功能却 ...
- 【转载】coroutine 与 goroutine 区别
如下原文转载自C语言中文网 C#.Lua.Python 语言都支持 coroutine 特性.coroutine 与 goroutine 在名字上类似,都可以将函数或者语句在独立的环境中运行,但是它们 ...
- Asp.net core中HttpResponse常用属性及Status code
在ASP.NET Core中,HttpResponse 表示HTTP响应,其中包括一些常用的属性和方法,用于设置HTTP响应的各种属性.HTTP响应通常由一个HTTP状态码,HTTP头(headers ...
- 【最新】MySQL 5.6 保姆级安装详细教程
MySQL5.6简介 MySQL 5.6 是 MySQL 数据库管理系统的一个重要版本,以其稳定性.性能优化和功能扩充受到广泛关注与使用.该版本在数据库领域中提供了更加高效的数据处理能力.增强的复制功 ...
- Spring Boot 整合Jedis连接Redis和简单使用
摘要:首先介绍如何在Windows系统安装Redis环境,然后在Spring Boot 项目中集成 Redis,最后简单地做了一个使用Jedis操作redis连接池的测试用例. §准备Redis环境 ...
- CentOS7.* 查询开机启动项
使用 systemctl list-unit-files 可以查看启动项 左边是服务名称,右边是状态,enabled是开机启动,disabled是开机不启动 过滤查询可以systemctl list- ...