题目:
Implement int sqrt(int x).
Compute and return the square root of x.

分析:我们平常可能好少会自己去求解某个数的平方根,一般都是直接调用系统提供的函数,其实一般针对问题,并没有直接求解的公式,一般都是通过一个公式多次迭代来无限接近于这个解,这时,这个值就是我们要求的解
下面我们简要介绍2中方法:牛顿迭代法和二分查找法。

牛顿迭代法想必大家都比较熟悉,就是给定一个初始值,然后一直迭代来逼近方程的解。

比如对于上图,首先给定一个初始值X0,然后,通过这个初始值作函数的切线,与y=0交于一点,横坐标为x1, 在通过点(x1,f(x1))作函数的切线,与y=0交于点(横坐标为x2),这样一直下去,得到xn(若把xn代入方程得到的值与函数实际的值小于某一个很小的阈值,则我们认为xn就是函数的解

故要求解sqrt(x),即求解sqrt(t)(t=x), 即求函数 f(x)=x2−t=0 f(x)=x^{2}-t=0的解,我们给初始解赋一个初始值 x0 x_{0}, 那么我们在点 (x0,f(x0)) (x_{0},f(x_{0}))处对曲线作切线, 得到如下方程 y−f(x0)=f(x0)′(x−x0) y-f(x_{0})=f(x_{0})'(x-x_{0}),令y=0, 解得 x=x0/2+t/(2x0) x=x_{0}/2+t/(2x_{0}), 则迭代的解 x1=x0/2+t/(2x0) x_{1}=x_{0}/2+t/(2x_{0}),像这样依次迭代 xn=xn−1/2+t/(2xn−1) x_{n}=x_{n-1}/2+t/(2x_{n-1}), 若 f(xn) f(x_{n})很接近于0(与0的差绝对值小于某个阈值),这迭代终止, xn x_{n}即为函数的解。

int mySqrt(int x)
{if(x==0||x==1)return x;double x0=x;double t=x;x0=x0/2+t/(2*x0);while(fabs(x0*x0-t)>0.00001){x0=x0/2+t/(2*x0);}cout<<x0<<endl;return int(x0);
}

另一种方法就是二分查找法了,思路很简单,就不介绍了,直接上代码:

int mySqrt(int x)
{if(x==0||x==1)return x;int mid,left=1,right=x;while(left<right){mid=left+(right-left)/2;if(mid>x/mid)right=mid-1;else if(mid==x/mid)return mid;else{if((mid+1)>x/(mid+1))return mid;if((mid+1)==x/(mid+1))return mid+1;left=mid+1;}}return (left+right)/2;
}

LeetCode 69: Sqrt(x) 求根号x(牛顿迭代法和二分查找法)相关推荐

  1. Leetcode(5)——遍历,并查集,回溯法和二分查找

    格式: 题号+题名+简单思路+code 遍历 深度优先遍历和广度优先遍历 很多dfs可以用Union Find解决 T130: 被围绕的区域 DFS的写法 func solve(board [][]b ...

  2. 【分治】LeetCode 69. Sqrt(x)

    LeetCode 69. Sqrt(x) 参考网址:http://www.cnblogs.com/grandyang/p/4346413.html Solution1: class Solution ...

  3. LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根

    LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型 ...

  4. leetcode 分享巧克力 java_LeetCode 1231. 分享巧克力(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你有一大块巧克力,它由一些甜度不完全相同的小块组成.我们用数组 sweetness 来表示每一小块的甜度. 你打算和 K 名朋友一起分享这块巧克力,所以你 ...

  5. LeetCode:69. Sqrt(x)

    题目链接: 69. Sqrt(x) 题目描述: Implement int sqrt(int x) Compute and return the square root of x. 题目解释: 提干非 ...

  6. LeetCode(69)Sqrt

    题目如下: Implement int sqrt(int x). Compute and return the square root of x. 分析如下: (1)借助一个小结论,任何一个数的squ ...

  7. 求平方根的算法 牛顿迭代法和二分法

    牛顿法: public double sqr(double n){double x=n,y=0.0;while (Math.abs(x-y)>0.0001){y=x;x=(x+n/x)/2;}r ...

  8. 最优化方法:牛顿迭代法和拟牛顿迭代法

    http://blog.csdn.net/pipisorry/article/details/24574293 基础 拐点 若曲线图形在一点由凸转凹,或由凹转凸,则称此点为拐点.直观地说,拐点是使切线 ...

  9. leetcode 911. Online Election | 911. 在线选举(加强堆 + 二分查找)

    题目 https://leetcode.com/problems/online-election/ 题解 我的解法是,用预计算(加强堆,O(nlogn)) + 二分查找(用的自带TreeMap,查找复 ...

最新文章

  1. AdaBoostClassifer详解及实战
  2. 在熊市中厚积薄发 比特币现金加大基础设施、应用程序和协议创新力度
  3. leetcode-34-在排序数组中查找元素的第一个和最后一个位置
  4. 前端学习笔记day01 html 标签之音频 embed+audio+video
  5. but no declaration can be found for element #39;aop:aspectj-autoproxy#39;.
  6. [Aaronyang] 写给自己的WPF4.5 笔记6[三巴掌-大数据加载与WPF4.5 验证体系详解 2/3]
  7. git pull 卡在 Unpacking objects 解决方法
  8. Programming Assignment 5: Burrows–Wheeler Data Compression
  9. 【JAVA 第三章 流程控制语句】课后习题 输出正整数的顺序相反数
  10. PTA c语言 统计单词的长度
  11. scikit-learn学习之神经网络算法
  12. CFile::Open
  13. 工业互联网推动制造业高质量发展研讨会在京召开
  14. 每天Leetcode 刷题 初级算法篇-数学问题-罗马数字转整数
  15. 使用doxygen查看文件包含关系图
  16. h5网页小游戏php源码,H5 组词小游戏源代码
  17. Sine-Tent-Cosine混沌映射(提供参考文献及Matlab代码)
  18. android统计app使用时间段,GitHub - yaozs/UseTimeStatistic: Android 系统中统计各个app的使用时长以及使用次数...
  19. git core.autocrlf配置说明
  20. 人间第一赋《破窑赋》《命运赋》《时运赋》

热门文章

  1. 网络工具之HCL模拟器安装及使用 | 寻找C站宝藏
  2. 到底是上班舒服还是上学舒服!上班一个月的感受!
  3. 图像处理中的梯度、导数如何求?(Robert算子,Sobel算子,Prewitt算子,Laplace算子)
  4. Linux 进程挂起、恢复相关命令
  5. ECSHOP最小起订数插件,ECSHOP商品起订数量插件,ECSHOP商品批发限购插件,ecshop商品批发起订量限购插件,ecshop商品购买批发最小起订量数量插件
  6. 使用 CSS 创建自定义鼠标游标
  7. 什么是马甲APP?怎么用马甲APP导流
  8. 礼多人不怪:跟美国教授通邮件的18种礼仪
  9. office(Excel)里面如何提取身份证中的出生日期
  10. 安装mujoco遇到一些坑