【每日算法Day 67】经典面试题:手动开根号,你知道几种方法

简介: 手动开根号

题目链接


LeetCode 69. x 的平方根[1]

题目描述



image.png

image.png

示例1

输入:
4
输出:
2

示例2

输入:
8
输出:
2
解释:
8 
的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

题解



image.png

牛顿法



image.png

image.png

梯度下降法



image.png

二分法



image.png

我运行了一下从 100 到 10000 每  100个数开根号的结果,统计了一下三种方法需要的计算次数,如下图所示:image.png


image.png

代码


c++

classSolution {
public:
intmySqrt(intx) { 
longy=int(newtonSqrt(x)) +1;  
returny*y>x?y-1 : y;    }
doublenewtonSqrt(doublen) { 
doublex0=n;   
while (abs(x0*x0-n) >=1e-6) {    
x0=0.5*(n/x0+x0);
        }     
returnx0;
    }
doublebinarySqrt(doublen) {  
doublel=0, r=n;   
while (r-l>=1e-6) {   
doublem= (l+r)/2;   
if (m*m<n) l=m;   
elser=m;    
        }      
returnr; 
    }
// 超时  doublegdSqrt(doublen) {    
doublex0=n;  
while (abs(x0*x0-n) >=1e-6) {   
doublelr=min(1e-3, 1e-1*x0/(x0*x0-n));  
x0=x0-lr*(x0*x0-n); 
        }       
returnx0;  
    }
};

参考资料

[1]

LeetCode 69. x 的平方根: https://leetcode-cn.com/problems/sqrtx/

image.png

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~

相关文章
|
3天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
3天前
|
存储 算法 编译器
米哈游面试算法题:有效的括号
米哈游面试算法题:有效的括号
28 0
|
3天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
49 0
|
1天前
|
算法 前端开发 Android开发
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题
|
1天前
|
算法 Java API
Groovy脚本基础全攻略,android面试算法题
Groovy脚本基础全攻略,android面试算法题
|
1天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
1天前
|
算法 架构师 网络协议
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
|
2天前
|
移动开发 算法 搜索推荐
2024最新Android算法相关面试大全,请查收
2024最新Android算法相关面试大全,请查收
|
3天前
|
算法
【免费】基于SOE算法的多时段随机配电网重构方法
【免费】基于SOE算法的多时段随机配电网重构方法
|
3天前
|
存储 缓存 算法
面试遇到算法题:实现LRU缓存
V哥的这个实现的关键在于维护一个双向链表,它可以帮助我们快速地访问、更新和删除最近最少使用的节点,同时使用哈希表来提供快速的查找能力。这样,我们就可以在 O(1) 的时间复杂度内完成所有的缓存操作。哈哈干净利索,回答完毕。