java数据结构与算法刷题-----LeetCode367. 有效的完全平方数

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

    • 自实现Math.sqrt()函数:牛顿迭代法

在这里插入图片描述

自实现Math.sqrt()函数:牛顿迭代法

解题思路:时间复杂度O( l o g 2 n log_2n log2n),空间复杂度O( 1 1 1)
  1. 本题如果想着暴力求解,找到平方根一定会超时
  2. 如果用二分法,就不会超时,但是这个方法无法精确求出根(精度不够)
  3. 但是如果使用牛顿迭代法,可以在找到一个数字的n次方根无限近似值(高数微积分中的泰勒级数,微积分本身就是干这个的,求极限,将曲线划分为若干小的块,对每个块求积分,最后得到无限趋近于正确结果的值)。
  4. 这道题和69题是一样的。具体如何做,可以参考69题
🏆LeetCode69:x 的平方根(二分查找和数学共有题)https://blog.csdn.net/grd_java/article/details/125511772
代码
  1. 二分法:如果理解不了牛顿迭代法,最起码要会这个
    在这里插入图片描述
class Solution {public boolean isPerfectSquare(int num) {int left = 0, right = num/2+1;//二分范围while (left <= right) {int mid = (right - left) / 2 + left;long square = (long) mid * mid;//获取mid平方if (square < num) {//如果比num小,说明mid太小了left = mid + 1;//去mid右边} else if (square > num) {//比num大,说明mid太大right = mid - 1;//去mid左边} else {return true;//如果和num一样,就找到了其完全平方根}}return false;}
}
  1. 牛顿迭代法:我们不需要求出平方根精确值,只需要获取其平方根整数形式,如果和num一样,就是完全平方根(因为完全平方根是整数)
    在这里插入图片描述
class Solution {public boolean isPerfectSquare(int num) {double cur = num,pre = num;//当前迭代结果,上次迭代结果while (true) {//公式:(cur + num/cur)/2cur = (cur+num/cur)*0.5;// if (pre - cur < 1e-6) break;确定精度,两次迭代结果的差的绝对值<指定精度,就说明精度到位if(Math.abs(pre-cur) < 1e-7) break;pre = cur;//pre记录cur的结果,成为下一次的前驱结果}int x = (int) cur;//获取迭代结果的整数形式,也就是(int)Math.sqrt(num)return x * x == num;//如果平方为num说明是完全平方根}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/799174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis单线程 VS 多线程

一、Redis 为什么选择单线程&#xff1f; 这种说法其实并不严谨&#xff0c;为什么这么说呢&#xff1f; Redis的版本有很多 3.x、4.x、6.x&#xff0c;版本不同架构也不同的&#xff0c;不限定版本问是否单线程也是不太严谨。 版本3.x&#xff0c;最早版本&#xff0c;也就…

项目架构MVC,DDD学习

写在前面 本文一起看下项目架构DDD&#xff0c;MVC相关的内容。 1&#xff1a;MVC 不管我们做什么项目&#xff0c;自己想想其实只是做了三件事&#xff0c;如下&#xff1a; 其实&#xff0c;这三件事完全在一个类中做完也可以可以正常把项目完成的&#xff0c;就像下面这…

【MacBook系统homebrew镜像记录】

安装 使用Homebrew 国内源安装脚本,贼方便&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"切换至清华大学镜像源&#xff1a; 命令合并&#xff1a; 分别切换了 brew.git、 homebrew-core.git、 homebrew-…

逆向案例十二——看准网企业信息json格式的信息

网址&#xff1a;【全国公司排行|排名榜单|哪家好】-看准网 打开开发者工具——刷新——网络——XHR——下滑页面加载新的页面——找到数据包 发现参数加密&#xff0c;返回的数据也进行了加密 按关键字在下方搜索 kiv进入第一个js文件 ctrlf打开文件里面的搜索框继续搜kiv找到…

12.手写JavaScript bind方法

一、核心思想 bind相比apply和call引入了闭包的思想&#xff0c;重点是正确找到this和arguments 二、代码实现 /*** 手写bind* param {Function} o 函数* param {Array} ...args1 数组* return 根据具体情况考虑*/ function Fn(a,b,c,d){console.log("this.name:"…

Java 面试宝典:Redis 的线程模型是怎么样的?

大家好&#xff0c;我是大明哥&#xff0c;一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站&#xff1a;https://www.skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经 Redis 的线程模型其实是分两块的&#xff1a; Redis 6.0 …

前端开发语言有那些?

前端开发语言有那些&#xff1f; 1、html 超文本标记语言&#xff1a;构建前端网页的基本结构&#xff0c;就象人的骨架一样。 2、css 层叠样式表&#xff1a;控制网页的样式和布局&#xff0c;就象人需要穿各种服式展现不同风采。 3、javascript 简称 JS 动态脚本语言&#x…

阿里面试总结

ThreadLocal 线程变量存放在当前线程变量中&#xff0c;线程上下文中&#xff0c;set将变量添加到threadLocals变量中 Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThreadLocals用来存储当前操作的ThreadLocal的引用及变量对象&#xff0c;把当前线程…

gcc/g++:预编译阶段嵌入头文件并完成替换

预编译阶段嵌入头文件并完成替换首先需要找到需要包含头文件的位置&#xff0c;然后进行引入。 示例&#xff1a; 1&#xff09;用户头文件 /*brief design and implements of demo-for-precompile.author wenxuanpeiemail 15873152445163.com(query for any question here) …

括号串(Deque)

题目 import java.util.Deque; import java.util.LinkedList; import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();sc.nextLine();char[] c sc.nextLine().toCharArray();Deque…

Prompt提示词——常见的Prompt框架

以下是一些常见的Prompt框架&#xff0c;包括它们的原理、功能、使用场景、优缺点以及示例&#xff1a; BROKE框架&#xff1a; 原理&#xff1a;BROKE是一个结合了OKR&#xff08;Objectives and Key Results&#xff09;方法论的框架&#xff0c;通过提供背景、角色、目标、关…

柒拾贰- tushare 模拟策略交易 (三)

书接上两回 柒拾- tushare 模拟策略交易 &#xff08;一&#xff09; 柒拾壹- tushare 模拟策略交易 &#xff08;二&#xff09; 开始 终于我们可以可以来进行模拟了 复杂 的我不会&#xff0c;所以就写个最简单的策略吧&#xff1a; 买入条件 比两年前是上升的比一年前…

前端开发之el-select 设置默认值后选项无法切换

前端开发之el-select 设置默认值后选项无法切换 前言解决方案 前言 在实际使用过程中发现再给el-select设置默认值之后选项无法进行切换了 解决方案 为el-select添加 change“$forceUpdate()” 添加这个即可 <template><el-form-item label"数据类型"&g…

【题目】【信息安全管理与评估】2023年国赛信息安全管理与评估正式赛任务书-模块2

全国职业院校技能大赛高等职业教育组 信息安全管理与评估 任务书 模块二 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 竞赛任务书&#xff0c;赛题&#xff0c;解析&#xff0c;培训服务添加博主wx&#xff1a;liuliu5488233 网络安全事件…

speech to text 库FastASR交叉编译arm target的配置

FastASR是一个比较方便的SPEECH TO TEXT的AI库。开源。下面介绍下其在交叉编译到ARM target时候的交叉编译的cmake配置&#xff1a; cmake_minimum_required(VERSION 3.10)project(FastASR)SET(CMAKE_C_COMPILER "/home/xxx/buildroot/output/platform_name/host/bin/aar…

Flutter第六弹 基础列表ListView

目标&#xff1a; 1&#xff09;Flutter有哪些常用的列表组建 2&#xff09;怎么定制列表项Item&#xff1f; 一、ListView简介 使用标准的 ListView 构造方法非常适合只有少量数据的列表。我们还将使用内置的 ListTile widget 来给我们的条目提供可视化结构。ListView支持…

性能分析--内存知识

内存相关知识 计算机中与CPU进行数据交换的桥梁。内存的速度&#xff0c;比CPU的速度要慢很多。比磁盘速度要快很多。内存中存放数据&#xff0c;一旦断电就会消失。linux系统的 /proc路径下的文件&#xff0c;都是内存文件。内存大小&#xff0c;一般 是GB为单位。 现在都操作…

WebKit是什么?

WebKit是一个开源的浏览器引擎&#xff0c;它用于呈现网页内容在许多现代浏览器中&#xff0c;包括Safari浏览器、iOS内置浏览器、以及一些其他浏览器如Google Chrome的早期版本。以下是一些关于WebKit的重要信息&#xff1a; 起源和发展&#xff1a;WebKit最初是由苹果公司为其…

K8s学习四(资源调度_1)

资源调度 发现对Pod操作不方便&#xff0c;不能直接操作&#xff0c;而且不能直接编辑&#xff0c;需要对原来的配置文件进行操作&#xff0c;而且需要删除之后再创建Pod&#xff0c;不方便&#xff0c;更多是通过控制器来操作。 Label和Selector 通过设置标签和选择器来确定…

HTTP【超文本传输协议】和HTTPS【超文本传输安全协议】有什么区别?

文章目录 一、HTTP和HTTPS是什么&#xff1f;1、HTTP&#xff08;超文本传输协议&#xff09;2、HTTPS&#xff08;超文本传输安全协议&#xff09;3、HTTPS中加入的SSL/TLS层是什么&#xff1f; 二、HTTP和HTTPS的差异1、安全性2、URL表示3、端口4、证书5、性能6、浏览器显示 …