leetcode/求平方根
代码
方法1:袖珍计算器算法,使用其他数学公式
x=x12=(elnx)12=e12lnx\sqrt{x}=x^{\frac{1}{2}}=(e^{lnx})^{\frac{1}{2}}=e^{\frac{1}{2}lnx}x=x21=(elnx)21=e21lnx
方法3:牛顿迭代法泰勒级数展开逼近真解,y=x^2-C,C代表待求x,逼近真解
package com.xcrj;/*** 剑指 Offer II 072. 求平方根* - 给定一个非负整数 x ,计算并返回 x 的平方根,即实现int sqrt(int x)函数。* - 正数的平方根有两个,只输出其中的正数平方根。* - 如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。*/
public class Solution72 {/*** 袖珍计算器算法* 使用其他数学公式(使用语言内置的函数,计算速度快)*/public int mySqrt1(int x) {if (0 == x) return 0;/*** Math.log(x)的base是e* (int):获取结果的整数部分* 浮点数的计算结果存在误差,取整之后,错误结果+1=正确结果* 例如,x=2147395600,r错误=46339,r正确结果=46340*/int r = (int) Math.exp(0.5 * Math.log(x));/*** 若r是正确答案则(r+1)*(r+1)>x* 若r是错误答案则r+1 todo* long:防止相乘越界*/return (long) (r + 1) * (r + 1) > x ? r : r + 1;}/*** 二分查找k^2仅小于x的k*/public int mySqrt2(int x) {if (0 == x) return 0;int l = 0, r = x, o = -1;// l=r,因为r=xwhile (l <= r) {int mid = ((r - l) >> 1) + l;// 找仅小于x的k,小于则往右侧靠拢逼近xif ((long) mid * mid <= x) {o = mid;l = mid + 1;}// 找仅小于x的k,大于则往左侧靠拢逼近xelse {// mid*mid<=x 已经跟x比较过了r = mid - 1;}}return o;}/*** 牛顿迭代法 浮点* - 本质是借助泰勒级数,从初始值开始快速向零点逼近,向真解逼近* <p>* 过程* - 构建函数,y=x^2-C,C代表待求x* - 初始点x0,x0=输入x。这种构建可以获取正数解* - 构建点x1,由y在x0处的斜率k0和y上的点(x0,y0)构成的直线与x轴的交点得到x1* -- 构建点x2,由y在x1处的斜率k1和y上的点(x1,y1)构成的直线与x轴的交点得到x2* -- 构建点xi,...* --- 根据直线与x轴交点求的xi=0.5 * (x_(i-1) + C / x_(i-1))* - 靠近程度:xi不停的靠近真解,直到x_(i-1)和xi的差值小于1e-7* -- 在xi不停靠近真解的过程中,x_(i-1)和xi之间的差值越来越小。因为y函数越来越平坦*/public int mySqrt3(int x) {if (0 == x) return 0;// C代表待求xdouble C = x;// 初始点x0,x0=输入x。这种构建可以获取正数解double x0 = x;// xpre=x_(i-1)代表前一个解double xpre = x0;while (true) {// 根据直线与x轴交点求的xidouble xi = 0.5 * (xpre + C / xpre);// 在xi不停靠近真解的过程中,x_(i-1)和xi之间的差值越来越小。因为y函数越来越平坦if (Math.abs(xi - xpre) < 1e-7) {return (int) xi;}xpre = xi;}}/*** 牛顿迭代法 整数*/public int mySqrt4(int x) {if (0 == x) return 0;// C代表待求xint C = x;// 初始点x0,x0=输入x。这种构建可以获取正数解int x0 = x;// xpre=x_(i-1)代表前一个解long xpre = x0;while (true) {// 根据直线与x轴交点求的xilong xi = (xpre + C / xpre) / 2;// 在xi不停靠近真解的过程中,xi * xi逐渐靠近xif (xi * xi <= x) {return (int) xi;}xpre = xi;}}
}
参考
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/jJ0w9p/solution/qiu-ping-fang-gen-by-leetcode-solution-ybnw/
来源:力扣(LeetCode)
leetcode/求平方根相关推荐
- 用python实现二分法求平方根_二分法求平方根(Python实现)
使用二分法(Bisection Method)求平方根. def sqrtBI(x, epsilon): assert x>0, 'X must be non-nagtive, not ' + ...
- 利用牛顿法求平方根-Go语言实现
牛顿法解释 百度的解释如下: 通俗的解释就是:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法.思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0f(x)=0f(x)=0的根 ...
- python二分法求解_Python使用二分法求平方根的简单示例
这篇文章主要为大家详细介绍了Python使用二分法求平方根的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 使 ...
- ACMNO.16用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数 输入 X 输出 X的
题目描述 用迭代法求 . 求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001.输出保留3位小数 输入 X 输出 X的平方根 样例输 ...
- 不用库函数求平方根!
1. 这里有好多种方法~ :http://www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx 2. 一个用神奇的数 - 0x5f3759df 来求平方 ...
- note 5 二分法求平方根,素数,回文数
+二分法求平方根 x = float(raw_input('Enter the number')) low = 0 high = x guess = (low + high ) / 2 if x &l ...
- 141. Sqrt(x)【牛顿迭代法求平方根 by java】
Description Implement int sqrt(int x). Compute and return the square root of x. Example sqrt(3) = 1 ...
- 经典算法:牛顿迭代法求平方根
//牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/ ...
- c语言迭代法求平方根_求平方根问题 (C++ 实现)
下面是用二分法和牛顿迭代法求一个正数的平方根. 二分法 这里的题目稍微宽了一点点,包含了整数和小数的情况,这里二分法就不用多说了,如果中间值的平方与目标值在误差范围内,则返回,否则根据大小情况改变左/ ...
最新文章
- JAVA产生加密公钥私钥_Java生成非对称型加密的公钥和私钥
- MySQL实时复制成为可能?
- dede php 循环,织梦怎么循环调用多级子栏目如二级栏目下三级栏目
- Codeforces 1276D/1259G Tree Elimination (树形DP)
- java vtd-xml_在java中使用vtd-xml获取xml中的属性文本
- 什么是长期存储在计算机外存上的有结构,数据库是长期存储在计算机主存内
- from robot.api import logger
- 决策者根据什么曲线做出决策_如何在开放社区中做出品牌决策
- Java中try catch finally语句中含有return语句的执行情况
- Tomcat 学习过程4
- 网络工程师Day10 以太网接口和链路配置
- SpringBoot的C2C水果商城系统
- MySQL可视化工具之Navicat for MySQL
- Xposed框架的安装包和卸载包的默认下载路径以及网站下载地址
- python二级真题--共十二套--前六套--选择题
- bat(batch)入门简介
- Docker+Consul+Registrator实现服务注册与发现
- Android 开发Usb知识
- 【小程序】websocket实现“谁是卧底”在线随机发牌
- 使用nw.js将vue项目打包为可在xp系统运行的桌面程序
热门文章
- 数据集-故障诊断:西储大学轴承的各项数据以及数据说明
- 2×24全交换开关矩阵方案
- 计算机网络中心防火门开启方向,防火门的开启方向怎么确定?
- (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]
- 2019.11.13
- 上海基诺墙绘 中荷学生共同创作涂鸦 “We are伐木累”示好
- 你不知道的Word中制作表格的7个技巧
- Tensorflow C++接口部署python深度学习训练模型
- AD10 report_drc.xsl不存在解决方法
- Android热更新详解