leetcode69:x的平方根

ops/2024/12/19 0:07:45/

原题地址:69. x 的平方根 - 力扣(LeetCode)

题目描述

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

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4
输出:2

示例 2:

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

解题思路

解题的核心思想是利用对数的性质来快速逼近平方根的值。我们知道 �=�2x=y2,则 �=�x​=y。通过对 �x 取对数,我们可以得到 log⁡(�)=2log⁡(�)log(x)=2log(y),从而 log⁡(�)=12log⁡(�)log(y)=21​log(x)。通过对两边取指数,我们可以得到 �=�12log⁡(�)y=e21​log(x),这就是代码中 Math.exp(0.5 * Math.log(x)) 的部分。

接下来,我们需要检查这个值是否是 �x 的平方根。如果 (���+1)2≤�(ans+1)2≤x,则 ���+1ans+1 是一个更接近的平方根;否则,���ans 就是 �x 的平方根。

源码实现

class Solution {public int mySqrt(int x) {// 如果x为0,直接返回0,因为0的平方根是0if (x == 0) {return 0;}// 使用对数和指数的性质来计算x的平方根的近似值int ans = (int) Math.exp(0.5 * Math.log(x));// 检查(ans + 1)的平方是否小于等于x,如果是,则ans + 1是x的平方根// 否则,ans就是x的平方根return (long) (ans + 1) * (ans + 1) <= x ? ans + 1 : ans;}
}

复杂度分析

  • 时间复杂度:O(1)。虽然代码中使用了对数和指数函数,但这些操作的时间复杂度可以认为是常数级别的,因为它们不需要迭代或递归。因此,整个算法的时间复杂度是常数级别的。

  • 空间复杂度:O(1)。算法中没有使用额外的数据结构来存储数据,除了几个变量,所以空间复杂度也是常数级别的。


http://www.ppmy.cn/ops/143026.html

相关文章

uniapp 应用的生命周期、页面的生命周期、组件的生命周期

uniapp 作为一款跨平台的移动应用开发框架&#xff0c;其生命周期分为应用生命周期、页面生命周期和组件生命周期。下面分别介绍这三种生命周期的具体内容&#xff1a; 应用生命周期 应用生命周期仅适用于整个应用&#xff0c;在 App.vue 中可以监听到以下生命周期函数&#…

FastJson反序列化学习-01

&#x1f338; FastJson FastJson是一个由阿里巴巴开发的高性能JSON处理库&#xff0c;支持Java对象与JSON字符串之间的互相转换。 本次漏洞研究基于FastJson的1.2.24版本。也就是最早出现FastJson反序列化漏洞的版本。 CVE-2017-18349&#xff0c;FastJson<1.2.24 &…

SQL 标准定义了哪些事务隔离级别?

SQL标准定义了四个事务隔离级别&#xff0c;它们分别是&#xff1a; READ UNCOMMITTED&#xff08;读取未提交&#xff09;&#xff1a; 最低的隔离级别。允许读取尚未提交的数据变更。可能会导致脏读、幻读或不可重复读。脏读是指一个事务可以读取到另一个事务未提交的数据。 …

ADB在浏览器中:ya-webadb项目安装与配置完全指南

ADB在浏览器中&#xff1a;ya-webadb项目安装与配置完全指南 ya-webadb ADB in your browser [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/ya/ya-webadb 项目基础介绍与编程语言 ya-webadb 是一个由 Yume-chan 开发的开源项目&#xff0c;它实现了ADB&#x…

基于大数据爬虫数据挖掘技术+Python的线上招聘信息分析统计与可视化平台(源码+论文+PPT+部署文档教程等)

博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringB…

Android Studio创建新项目并引入第三方so外部aar库驱动NFC读写器读写IC卡

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单&#xff0c;选择 要创建的项目模版&#xff0c;点击 Next 二、输入项目名称…

在 Docker 中运行 Golang 应用程序,如何做?

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

浅谈Java注解之CachePut

一、CachePut的介绍 Java注解CachePut是Spring框架中用于缓存操作的一部分&#xff0c;主要用于更新缓存中的数据。 功能说明 CachePut注解用于在方法执行后更新缓存中的数据。与Cacheable不同&#xff0c;CachePut注解的方法总是会被执行&#xff0c;并且其返回结果会被放入缓…