当前位置: 首页 > news >正文

LeetCode 面试经典150题 69.x的平方根

题目:给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

思路

方法一:袖珍计算器算法。用指数函数 exp 和对数函数 ln 代替平方根函数的方法。

注意: 由于计算机无法存储浮点数的精确值,而指数函数和对数函数的参数和返回值均为浮点数,因此运算过程中会存在误差。例如当 x=2147395600 时,的计算结果与正确值46340 相差 10^{-11},这样在对结果取整数部分时,会得到 46339 这个错误的结果。因此在得到结果的整数部分 ans 后,我们应当找出 ans 与 ans+1 中哪一个是真正的答案。

方法二:二分查找

方法三:牛顿迭代

代码

class Solution {  // 方法一public int mySqrt(int x) {if (x == 0)return 0;int ans = (int) Math.exp(0.5 * Math.log(x));return (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) mid * mid <= x) {ans = mid;l = mid + 1;} else {r = mid - 1;}}return ans;}
}
class Solution {  // 方法三public int mySqrt(int x) {if (x == 0)return 0;double C = x, x0 = x;while (true) {double x1 = 0.5 * (x0 + C / x0);if (Math.abs(x0 - x1) < 1e-7)break;x0 = x1;}return (int) x0;}
}

性能

方法一 时间复杂度o(1)   空间复杂度o(1)

方法二 时间复杂度o(log x)   空间复杂度o(1)

方法三 时间复杂度o(log x)二次收敛,比二分查找快   空间复杂度o(1)

相关文章:

  • SpringBoot整合JPA 基础使用
  • [网络]NAT、代理服务、内网穿透、内网打洞
  • Python3自带HTTP服务:轻松开启与后台管理
  • unicode编码和ascii编码的区别
  • EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析
  • Git大框架总结
  • 公交IC卡收单管理系统 多处 SQL注入致RCE漏洞复现
  • 15 数组——15. 三数之和 ★★
  • 抽象类、比较器和接口
  • 基于Java+VUE+echarts大数据智能道路交通信息统计分析管理系统的设计与实现
  • 在Ubuntu 16.04上安装最新版本的MySQL的方法
  • 基于单片机8路数字电压表电压采集系统
  • 服务器开通个人账户
  • Jenkins: fontconfig head is null, check your fonts or fonts configuration;
  • PostgreSQL的表碎片
  • ----------
  • 【css3】浏览器内核及其兼容性
  • cookie和session
  • crontab执行失败的多种原因
  • HomeBrew常规使用教程
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Iterator 和 for...of 循环
  • Java 23种设计模式 之单例模式 7种实现方式
  • Js基础知识(四) - js运行原理与机制
  • js写一个简单的选项卡
  • k个最大的数及变种小结
  • React中的“虫洞”——Context
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 精彩代码 vue.js
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 系统认识JavaScript正则表达式
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 鱼骨图 - 如何绘制?
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 国内开源镜像站点
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # Apache SeaTunnel 究竟是什么?
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (11)(2.1.2) DShot ESCs(四)
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (C#)获取字符编码的类
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (搬运以学习)flask 上下文的实现
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一) 初入MySQL 【认识和部署】
  • (一一四)第九章编程练习
  • .java 9 找不到符号_java找不到符号
  • .net core 管理用户机密