丑数问题,力扣264,坑点

丑数问题,力扣264,坑点


力扣链接
给你一个整数 n ,请你找出并返回第 n 个 丑数 。

丑数 就是质因子只包含 2、3 和 5 的正整数。

示例 1:

输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
示例 2:

输入:n = 1
输出:1
解释:1 通常被视为丑数。
正确源码:

class Solution {public  static int nthUglyNumber(int n) {int p2=1;int p3=1;int p5=1;int[] ugly=new int[n+1];ugly[1]=1;for(int i=2;i<=n;i++){ugly[i]=Math.min(Math.min(3*ugly[p3],5*ugly[p5]),2*ugly[p2]);if(ugly[i]==2*ugly[p2]){p2++;}if(ugly[i]==3*ugly[p3]){p3++;}if(ugly[i]==5*ugly[p5]){p5++;}}return ugly[n];}
}

解读:
可以看出任何一个丑数都必定是前面的某一个比他小的丑数,乘以2或者3或者5得到的
因此只需要把所求丑数之前的所有丑数乘以2,3,5,然后找最小的即可
例如:最开始是求第二个丑数
在这里插入图片描述
2最小

然后是第三个丑数
在这里插入图片描述
3最小,第三个丑数是3
接着是第四个丑数
在这里插入图片描述
4最小,第四个丑数是4
这样做下去肯定是可以找到第n个丑数的,可是,是不是太复杂了,时间复杂度非常大
因此进行优化
首先,很明显丑数是递增的
因此在下面的图中
在这里插入图片描述

下一个丑数是5,他是5乘以某一个丑数得到的,10和15和20都是5乘以某一个丑数

但是在5没有被排好之前。是不可能轮到他们的,因为丑数是递增的数列,因此把他们乘出来,就是无用功,所以就可以拿一个指针p5来记录5乘到哪一个丑数了

对于其他因子2和3也是同理,一旦乘了某个丑数,对应的指针就加加

ugly[i]=Math.min(Math.min(3*ugly[p3],5*ugly[p5]),2*ugly[p2]);if(ugly[i]==2*ugly[p2]){p2++;}else if(ugly[i]==3*ugly[p3]){p3++;}else if(ugly[i]==5*ugly[p5]){p5++;}

坑点:下面的代码是错的

class Solution {public  static int nthUglyNumber(int n) {int p2=1;int p3=1;int p5=1;int[] ugly=new int[n+1];ugly[1]=1;for(int i=2;i<=n;i++){ugly[i]=Math.min(Math.min(3*ugly[p3],5*ugly[p5]),2*ugly[p2]);if(ugly[i]==2*ugly[p2]){p2++;}else if(ugly[i]==3*ugly[p3]){p3++;}else if(ugly[i]==5*ugly[p5]){p5++;}}return ugly[n];}
}

区别就在于,正确代码用的三个if,错误代码用的是else if。
错误代码过不了,放idea编译器里面发现会产生一些相同的重复丑数。
因为有可能2 × \times ×ugly[p2]与3 × \times ×ugly[p3]与5 × \times ×ugly[p5]这三个中有至少两个相等,
假设是2 × \times ×ugly[p2]和5 × \times ×ugly[p5]相等,这个时候p2和p5都要同时加加
而用else if就只会加一次,所以会有重复的丑数

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

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

相关文章

Shell选择结构

文章目录 一、条件判断二、实例 一、条件判断 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[条件表达式] 格式3&#xff1a;[[条件表达式]] -e 是否存在&#xff0c;不管是文件还是目录&#xff0c;只要存在&#xff0c;条件就成立。 -f 是否为普通文件 -d 是否为目录…

《昇思25天学习打卡营第01天|qingyun201003》

打卡 日期 心得 我的主语言并不是Python,以及现在从事的工作也并不是开发&#xff1b;所以对于这个系列的课程&#xff0c;学习起来是较为困难的&#xff0c;所以基于这种情况&#xff0c;该如何进行学习&#xff1f;我的做法是全部交给AI&#xff0c;使用AI一步步解析代码&a…

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int fun main(args: Array<String>) {var any1: Any?any1 nullval n1 any1 as? Int ?: -2024println(n1)kotlin.runCatching {var any2: Any?any2 nullval n2 any2 as Intprintln(…

python xlsx 导出表格超链接

该Python脚本用于从Excel文件中的第一列提取所有超链接并保存到一个文本文件中。首先&#xff0c;脚本导入必要的库并定义输入和输出文件的路径。然后&#xff0c;它确保输出文件的目录存在。接着&#xff0c;脚本加载Excel文件并选择活动工作表。通过遍历第一列的所有单元格&a…

Internet Download Manager6.42最新下载器互联网冲浪小能手们!

今天我要来种草一个超级棒的宝贝——Internet Download Manager&#xff08;简称 IDM&#xff09;。这个小家伙简直是下载界的“速度与激情”代言人&#xff0c;让我彻底告别了等待的日子。&#x1f389; IDM马丁正版下载如下: https://wm.makeding.com/iclk/?zoneid34275 …

【创作纪念日】我的三周年创作纪念日

光阴荏苒&#xff0c;从我开始在CSDN写作已经整整3年(2024.7.10)&#xff0c;3年前的今天2021.7.10开始记录第一篇文章&#xff0c;到今天的305篇文章&#xff01;没想到&#xff01;积累的力量&#xff01;继续努力&#xff01; 机缘 1、创作初心&#xff0c;对自己工作的经…

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源

299k stars利用Public APIs提升开发效率&#xff1a;探索APILayer提供的开源资源 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;是实现应用间通信和功能扩展的关键工具。公共API&#xff08;Public APIs&#xff09;则为开发者提供了宝贵的资源&#…

路由器中 RIB 与 FIB 的区别

注&#xff1a; 本文原是前面发的一篇文章的中间注释&#xff0c;但注释跨行太多&#xff0c;影响原文连贯阅读。 RIB&#xff08;Routing Information Base&#xff0c;路由表&#xff09; RIB 存储所有的路由信息&#xff0c;与具体的路由协议无关。所有的路由协议都在这里…

昇思25天学习打卡营第15天|基于 MindSpore 实现 BERT 对话情绪识别

文章目录 昇思MindSpore应用实践1、基于 MindSpore 实现 BERT 对话情绪识别BERT 模型简介数据集数据加载和数据预处理 2、模型训练模型验证 3、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 1、基于 MindSpore 实现 BERT…

ArduPilot开源代码之AP_OpticalFlow_CXOF

ArduPilot开源代码之AP_OpticalFlow_CXOF 1. 源由2. Library设计3. 重要例程3.1 AP_OpticalFlow_CXOF::init3.2 AP_OpticalFlow_CXOF::update3.3 AP_OpticalFlow_CXOF::detect 4. 总结5. 参考资料 1. 源由 AP_OpticalFlow_CXOF是就是一个光流计&#xff0c;与前面传感模块&…

【网络】为什么SCTP四次握手可以抵御SYN攻击

深入理解SCTP的安全性&#xff1a;从四次握手到抵御SYN攻击 引言 在网络通信的世界中&#xff0c;安全性和可靠性是至关重要的。传统的TCP&#xff08;传输控制协议&#xff09;在建立连接时使用三次握手&#xff0c;但这种机制存在一些安全漏洞&#xff0c;比如SYN攻击。而S…

解决IDEA每次新建项目都需要重新配置maven的问题

每次打开IDEA都要重新配置maven&#xff0c;这是因为在DEA中分为项目设置和全局设置&#xff0c;这个时候我们就需要去到全局中设置maven了。我用的是IntelliJ IDEA 2023.3.4 (Ultimate Edition)&#xff0c;以此为例。 第一步&#xff1a;打开一个空的IDEA&#xff0c;选择左…

数据结构day6链式队列

主程序 #include "fun.h" int main(int argc, const char *argv[]) { que_p Qcreate(); enqueue(Q,10); enqueue(Q,20); enqueue(Q,30); enqueue(Q,40); enqueue(Q,50); show_que(Q); dequeue(Q); show_que(Q); printf(&qu…

stm32按键设置闹钟数进退位不正常?如何解决

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

A63 STM32_HAL库函数 之 Uart通用驱动 -- B -- 所有函数的介绍及使用

A63 STM32_HAL库函数 之 Uart通用驱动 -- B -- 所有函数的介绍及使用 1 该驱动函数预览1.15 HAL_UART_DMAResume1.16 HAL_UART_DMAStop1.17 HAL_UART_Abort1.18 HAL_UART_AbortTransmit1.19 HAL_UART_AbortReceive1.20 HAL_UART_Abort_IT1.21 HAL_UART_AbortTransmit_IT1.22 HA…

【Zoom安全解析】深入Zoom的端到端加密机制

标题&#xff1a;【Zoom安全解析】深入Zoom的端到端加密机制 在远程工作和在线会议变得越来越普及的今天&#xff0c;视频会议平台的安全性成为了用户关注的焦点。Zoom作为全球领先的视频会议软件&#xff0c;其端到端加密&#xff08;E2EE&#xff09;功能保证了通话的安全性…

李彦宏: 开源模型是智商税|马斯克: OpenAI 闭源不如叫 CloseAI

在 2024 年世界人工智能大会&#xff08;WAIC 2024&#xff09;上&#xff0c;百度创始人、董事长兼首席执行官李彦宏发表对开源模型的评价。 李彦宏认为&#xff1a;开源模型实际上是一种智商税&#xff0c;而闭源模型才是人工智能&#xff08;AI&#xff09;行业的未来。 马…

python库 - sentencepiece

SentencePiece 是一个开源的文本处理库&#xff0c;由 Google 开发&#xff0c;专门用于处理和生成无监督的文本符号化&#xff08;tokenization&#xff09;模型。它支持字节对编码&#xff08;BPE&#xff09;和 Unigram 语言模型两种主要的符号化算法&#xff0c;广泛应用于…

关于es中的kibana中的一些常用操作命令语句

1、查询某个索引的文档数据 get /index_name/_search2、根据某个索引下的具体某个字段的值来查询数据&#xff0c;这里比如说是&#xff1a;根据就modelId 1787774412315766785来查询数据 GET /index_name/_search {"query": {"term": {"modelId&q…

如何批量更改很多个文件夹里的文件名中包含文件夹名?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…