leetCode 69.Sqrt(x) (平方根) 解题思路和方法
来源:互联网 发布:java连接phoenix 编辑:程序博客网 时间:2024/04/30 11:21
Implement int sqrt(int x)
.
Compute and return the square root of x.
思路:因为本题是int类型的数据,所以可以使用二分法查找。但是面试的时候很少有整数的,所以真正的面试都是double。
int类型如下:
public class Solution { public int mySqrt(int x) { if(x <= 1) return x; long i = 0; long j = x/2 + 1;//符合的结果在i-j的范围内 long mid = 0; while(i <= j){//二分法查询合适的值 mid = (i+j)/2; if(mid*mid == x) return (int) mid; if(mid*mid < x) i = mid + 1; else j = mid - 1; } if(mid*mid > x)//微调结果 mid--;return (int) mid; }}
double类型的没办法用二分,只能用牛顿迭代公司求解。
方法二:参考http://www.cnblogs.com/AnnieKim/archive/2013/04/18/3028607.html
经过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(xi)(x - xi),其中f'(x)为f(x)的导数,本题中为2x。令切线方程等于0,即可求出xi+1=xi
继续化简,xi+1=xi
有了迭代公式,程序就好写了。关于牛顿迭代法,可以参考wikipedia以及百度百科。
代码如下:public double mySqrt(double x) { if( x < 0) return x; double x0 = x; while(Math.abs(x0*x0 - x) >= 1e-10){ x0 = (x0 + x/x0)/2; } return x0; }
0 0
- leetCode 69.Sqrt(x) (平方根) 解题思路和方法
- Leetcode 69. Sqrt(x) 解题报告【C库函数sqrt(x)模拟-求平方根】
- Sqrt(x) 求平方根@LeetCode
- leetcode解题之69.Sqrt(x) & 367. Valid Perfect Square Java版 (求一个数的平方根)
- leetcode 69. Sqrt(x) 牛顿法求平方根
- [leetcode] 69. Sqrt(x) 解题报告
- [Leetcode] 69. Sqrt(x) 解题报告
- LeetCode 69. Sqrt(x) 解题报告
- [LeetCode-69] Sqrt(x)(求解平方根)
- LeetCode Sqrt(x) 整数平方根 java
- LeetCode Sqrt(x) 解题报告
- LeetCode-Sqrt(x)-解题报告
- [LeetCode] Sqrt(x) 解题报告
- Sqrt(x) 求平方根
- Leetcode刷题记—— 69. Sqrt(x)(求整数x的平方根)
- Leetcode 69. Sqrt(x) 开根号 解题报告
- leetCode 50.Pow(x, n) (x的n次方) 解题思路和方法
- LeetCode 69. Sqrt(x)
- nohup让程序后台执行
- PHP匹配中文汉字
- AndroidManifest.xml中的application中的name属性
- UIWindow
- WinForm程序启动时不显示主窗体
- leetCode 69.Sqrt(x) (平方根) 解题思路和方法
- codevs1005
- Windows下Python添加库(模块)路径
- 初识编译器
- B. Worms
- 基于OpenLayers的Web GIS示例
- Codeforces Round #246 (Div. 2) (ABCD详细题解)
- web2.0之JSTL与EL
- Mymusic SplashScreen界面实现