java数据结构与算法刷题-----LeetCode69:x 的平方根

力扣:69. x 的平方根 题解(Java) 题目地址:x的平方根 题目描述: 实现int sqrt(int x)函数。 计算并返回x的平方根,其中x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 ... 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

1. 数学

解题思路:时间复杂度O( 1 1 1),空间复杂度O( 1 1 1)

通过自然对数换底,将其换为其它两个数学操作: x = x 1 2 = e l n x 1 2 = e 1 2 l n x \sqrt{x} = x^\frac{1}{2} = e^{lnx^\frac{1}{2}} = e^{\frac{1}{2}lnx} x ​=x21​=elnx21​=e21​lnx

代码

在这里插入图片描述

class Solution {
    public int mySqrt(int x) {
        if (x == 0) return 0;
        //Math.exp(a)表示对a做自然对数,求lna
        int ans = (int) Math.exp(0.5 * Math.log(x));
        //计算机无法存储浮点数精确值,指数函数和对数函数都返回浮点数,运算过程会有偏差
        //当求Integer.MAX_VALUE等较大值,例如x = 2147395600,Math.exp(0.5 * Math.log(x));的计算结果与正确值46340差10^-11
        //此时我们取值时,会得到46339这个错误的结果,也就是取值后相差1
        //所以如果求出的数+1相乘后 <= 原来的数,就返回ans+1.否则说明没有偏差到取整差1,返回ans本身
        return (long) (ans + 1) * (ans + 1) <= x ? ans + 1 : ans;
    }
}

2. 二分查找法

解题思路:时间复杂度O( l o g 2 x log_2x log2​x),空间复杂度O( 1 1 1)
  1. x的平方根的整数部分ans就是 k 2 k^2 k2 <= x的最大k值.我们对k进行二分查找,从而提高查找效率
  2. 我们知道x的一半x/2的平方是 >= x的, 因此k的范围就是[0,x/2],我们对这个范围进行二分查找
代码

在这里插入图片描述

class Solution {
    public int mySqrt(int x) {
        if(x==1) return 1;
        int l = 0, r = x/2;//二分查找的范围
        int ans = -1;//保存结果
        while (l <= r) {//如果还有的查就继续
            int mid = l + (r - l) / 2;//获取l和r的mid
            if ((long) mid * mid <= x) {//如果当前mid比x的平方根小
                ans = mid;//保存mid
                l = mid + 1;//从mid右边区间继续
            } else {//如果mid比x平方根大
                r = mid - 1;//从mid左边区间继续找
            }
        }
        return ans;
    }
}

3. 牛顿迭代法

解题思路:时间复杂度O( l o g 2 x log_2x log2​x),空间复杂度O( 1 1 1)
  1. 这是底层求平方根的库函数的常见实现方法。原理是高数中的微积分中的知识,但是属于超纲题
  2. 核心是通过迭代,也就是泰勒级数,不断逼近函数的零点。也就是找函数零点的一种方法
代码

在这里插入图片描述

class Solution {
    /**牛顿迭代法,可以算出小数,高数中的导数求零点的进阶知识
    * 例如 求根号2,我们先随便猜近似值4(猜多少都无所谓,越接近,越省时间),然后根据公式a = (a+x/a)/2
    *   迭代第一次 a = (4+2/4)/2 = 2.25
    *   第二次    a = (2.25+2/2.25)/2 = 1.56944....
    *   第三次    a = (1.56944...+2/1.56944...)/2 = 1.42189.....
    *   计算次数越多,越精确,但是如果你要用java算,不要超过精度
    *   比如我们可以精确到1e-7(10的-7次方精度0.0000001)
    *      如何判断精确到这个精度呢
    *          如果 |上一次的值-这次迭代的值|的绝对值 <1e-7 就说明精度到位了
    *   注意这个公式不能给0用
    * @param x
    * @return
    */
    public int mySqrt(int x) {
        if(x==0) return 0;//公式不能给0用
        //a是每次迭代结果,b是上一次迭代结果
        double a = x,b = x;
        while(true){
            //牛顿迭代公式,(当前迭代结果a+原值x/当前迭代结果a)/2
            a = (a+x/a)*0.5;//牛顿迭代,迭代次数越多精度越高
            //编程,确定精度方法,两次迭代结果的差的绝对值<指定精度,就说明精度到位了
            if(Math.abs(b-a)<1e-7) break;
            b = a;//否则b记录这次迭代结果
        }
        return (int)a;//题目要求,必须是整数
    }
}
LeetCode 69 x的平方根 题目描述: 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去 思路一: 暴力解法 从一开始一个个试数,直到该数平方比x大,那么该数减一就是x的平方根舍去小数部分的那个整数。 代码: int mySqrt(int x){ if(x<=0) 阅读详情

相关推荐

【简单】力扣算法题解析LeetCode69:x的平方根

题目要求计算非负整数x的算术平方根,仅保留整数部分。禁止使用内置指数函数。解法:采用二分查找法,在区间[0, x]内定位满足mid² ≤ x的最大整数。通过mid ≤ x/mid避免乘法溢出,时间复杂度为O(logx)。特殊处理x=0,初始边界设为1和x,循环更新中点和边界,最终返回有效解。示例:x=8输出2。代码通过除法替代乘法确保安全性,高效可靠。

ylumwd的博客 812

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新

本文相当于目录方便快速检索内容,没有实际内容,只做索引 源码(码云):https://gitee.com/yin_zhipeng/data_structures_and_algorithms_in_java.git 文章目录一、堆栈(Stack) 一、堆栈(Stack)

殷志鹏的博客 1114

STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上

STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上 参考了好多大神博客,自己写的过程中发现,还有些小细节。 一、打开Notepad写需要的字 另存为 UTF-16LE 也就是Unicode。 二、打开FontCvtST转 删掉所有字 读入test.txt里的字 选择刚才的test.txt 另存为.c文件 改个英文名 复制到RTOS的例程文件夹下 三、打开GUIBuilder 画一个这样的 保存之前要注意路径配置要在当前位置,否则存不上 生成的D

weixin_41376117的博客 1938

LeetCode刷题目录【JAVA版】

备注:目前有 48 道题的。

尕白白的专栏 649

SUMO从入门到精通:手把手教你用开源工具完成智能网联车仿真(附Python接口教程)

本文提供了一份SUMO开源交通仿真工具的完整实战指南,从环境搭建、基础仿真到Python接口TraCI的深度应用。重点讲解了如何利用SUMO的高度可定制性进行智能网联车仿真,包括实现动态信号优先等核心算法,并介绍了与网络仿真器集成以构建高保真车联网通信环境的方法。

weixin_28327051的博客 541

CAD图纸智能搜索三大突破:图纸秒搜技术、相似度匹配与AI语义搜索

CAD图纸作为核心资产,长期面临管理难题:传统全文检索需逐张打开图纸人工查找,效率低下;相似图纸匹配依赖人工比对,误差率高;非专业人员难以通过模糊描述精准定位图纸。针对这些问题,唯杰地图推出三项智能解决方案:一是基于现代化索引引擎的​​全文搜索​​,支持秒级检索图纸内的文字、图层、块名称等,并可多条件组合查询;二是​​相似度搜索​​,通过SIFT算法和深度学习提取几何特征与拓扑结构,实现高精度匹配;三是​​AI语义搜索​​,利用大模型解析自然语言指令(如“查找半径为10的红色圆”),直接定位目标图形。

vjmap的博客 1870

LeetCode热题100--三数之和(Java)代码解析

💬💬。

Z70769691的博客 435

为什么Nano Banana在图像一致性上碾压GPT和豆包?深度解析其技术原理与使用技巧

本文深度解析了Nano Banana在图像一致性上超越GPT和豆包等工具的技术原理。它通过基于参考图的强条件生成、精准的区域感知与掩码控制等核心技术,实现了“外科手术式”的精准图像编辑。文章还分享了包括提示词工程、参数调整在内的实用技巧,并探讨了通过API Key将其能力集成到自动化工作流中的潜力。

omega的博客 358

问题 I: 整理题库

为了提高大家的程序设计水平,唐克老师建立了一个校内题库。题库中共有n道题,第i道题目的难易程度用ti表示,这n道题根据由易到难的顺序已排好。现在老师决定插入m道难度为dj的题到题库中,题库中的题仍然按照由易到难的顺序排好。第三行包含m个用一个空格隔开的正整数dj,表示待插入的每道题的难度。第二行包含n个用一个空格隔开的正整数ti,表示题库中每道题的难度。一行若干个用一个空格隔开的正整数,表示插入后题库的试题难度情况。第一行包含两个用一个空格隔开的整数n和m。

2303_77944163的博客 796

Cursor插件安装CodeX保姆级教程:从登录到调整面板布局,一步不落

本文提供Cursor编辑器安装CodeX插件的详细教程,涵盖从登录到调整面板布局的全流程。通过优化界面布局和配置参数,帮助开发者提升编码效率,特别适合需要智能代码补全的编程场景。

weixin_42648844的博客 4774

天龙八部TLBB系列 - 网单用数据库修改为其他门派

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等) --- 天龙八部修改门派

空名先生 9430

力扣小白刷题之303题区域和检索 - 数组和不变

题目描述 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包括 i, j 两点。 说明: 假设数组不可变 会多次调用sumRange方法 思路 说明中提到:会多次调用sumRange方法,所以每次都逐个相加计算子区间的和不是理想的做法,可以借助缓存来保存区域和。 若使用二维数组dp,dp[i][j]表示 i 到 j 的区域和,需要 O(n^2)空间复杂度。 考虑以上因素,我们使用一维sum,其中sum[i]表示 0 到 i - 1索引处的累加和,即sum[i]

weixin_43525710的博客 398

OceanBase迁移平台OMS企业版部署

OceanBase迁移平台OMS企业版部署摘要: 本文档详细介绍了OceanBase迁移平台OMS企业版的部署流程,包含环境准备、OAT部署管理、MetaDB部署等关键步骤。

Sebastien23的博客 522

力扣简单题系列:x 的平方根(LeetCode 69)

力扣第69题 x的平方根

weixin_53910667的博客 1846

基于STC8G1K08A单片机的7位PWM输出程序(PCA功能实现呼吸灯效果)

摘要:本文展示了基于STC8G单片机的PWM占空比控制实现。通过定时器0中断每5ms调整占空比(0-127范围),实现呼吸灯效果。关键代码包括:1)PWM初始化(7位PWM模式);2)定时器配置(1ms中断);3)主循环根据标志位动态调整占空比。硬件采用P5.4引脚输出PWM信号,通过direction标志实现占空比自动增减循环。该方案适用于LED亮度调节等场景,系统时钟24MHz,采用12T模式。

weixin_74013772的博客 868

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode网址:https://leetcode.com/ LeetCode中文版:https://leetcode-cn.com/ 二.刷题指南 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出 精力全放在解决具体问题上题目有丰富的讨论 可以参考别人的思路精确了解自己代码在所有提交代码中

cpb____的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将...

AI天才研究院 9037

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【leetcode刷题】61.x 的平方根——Java版

二分查找联系

公号:一条coding 1万+

Leetcode69. x 的平方根

Leetcode69. x 的平方根 题目: 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 题解: 方法一:二分法 时间复杂度:O(log⁡N),二分法的时间复杂度是对数级别的。 空间复杂度:O(1),使用了常数个数的辅助空间用于存储和比较。 def mySqrt(x: Int):.........

会流泪de鱼的博客 2万+

LeetCode刷题69-简单-x的平方根

LeetCode刷题69-简单-x的平方根 算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题! 第一遍,不求最优解,但求能过!!!

布小禅的博客 1139

Leetcode 69 x的平方根 Java

Leetcode 69 x的平方根 这道题的标准答案应该是使用牛顿迭代法,但是现在不想看…所以记一下,这道题等空下来的时候要重新做。 我用了二分法的办法做; class Solution { public int mySqrt(int x) { int left=0,right=46340; while(left<right) { ...

qxdPx的博客 542

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)

方法优点缺点时间复杂度空间复杂度其他二分查找思路简单,直观易懂可能不是最优解,对于非整数平方根需要额外处理O(log x)O(1)适用于整数平方根计算牛顿迭代收敛速度快,通常很快能得到近似解需要选择合适的初始值和阈值近似O(1)O(1)适用于需要高精度或浮点数平方根计算。

1374

精选力扣500题 第31题 LeetCode 69. x 的平方根【c++ / java 详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 2、思路 (二分) O(logx)O(logx)O(logx) 我们二分出最大的 y2<=xy^2 <=

林深不见鹿 的博客 4571

力扣69. x 的平方根(java二分法)

力扣69. x 的平方根(java二分法) 思路: 只要是 >=4 的数,平方根肯定小于等于它的一半,根据这个思路,我们可以选择二分法。 public int mySqrt(int x) { //排除影响条件 if(x == 0){ return 0; } if(x < 4){ ...

a1106103430的博客 501

Leetcode 69. x 的平方根

Leetcode 69. x 的平方根题目描述:问题分析:代码实现:代码结果: 题目描述: 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去 问题分析: 实现 int sqrt(int x) 函数。 根据这个题目的要求,需要求的是一个数的平方根的下限

weixin_43373022的博客 455
上一篇: java数据结构与算法刷题-----LeetCode100:相同的树
下一篇: java数据结构与算法刷题-----LeetCode101:对称二叉树
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值