热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数字与数学5:丑数

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数字与数学5:丑数相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数字与数学5:丑数相关的知识,希望对你有一定的参考价值。






LeetCode263和264是两道关于丑数的问题,一听名字挺邪乎。看一下要求:

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

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

示例1:
输入:n = 6
输出:true
解释:6 = 2 × 3
示例2:
输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。

LeetCode263是让你判断一个数是不是丑数,264是让你判断前n个丑数。

如果 n 不是正整数(即小于等于 0):必然不是丑数,直接返回 false。如果 n是正整数:我们对 n执行 2 3 5 的整除操作即可,直到 nn 被除干净,如果 nn 最终为 1 说明是丑数,否则不是丑数。

这里有一点需要想明白,2 3 5 先除哪一个都是可以的,因为乘法本身具有交换律。所以代码就是:

class Solution
public boolean isUgly(int n)
if (n <&#61; 0) return false;
while (n % 2 &#61;&#61; 0) n /&#61; 2;
while (n % 3 &#61;&#61; 0) n /&#61; 3;
while (n % 5 &#61;&#61; 0) n /&#61; 5;
return n &#61;&#61; 1;

第二个题&#xff0c;我们可以通过一个个计算 &#xff0c;然后遍历来寻找&#xff0c;但是这样的问题也很明显 &#xff0c;那就是计算次数太多了&#xff0c;效率不高。

一般涉及到固定n的时候&#xff0c;都要考虑一下能否使用堆来实现&#xff0c;而且遵循”找第K小用大&#xff0c;找第大用小“的原则&#xff0c;这里是要找第K大&#xff0c;所以我们就尝试用最小堆试一下。

初始时堆为空。首先将最小的丑数 11 加入堆。

每次取出堆顶元素 xx&#xff0c;则 xx 是堆中最小的丑数&#xff0c;由于 2x, 3x, 5x2x,3x,5x 也是丑数&#xff0c;因此将 2x, 3x, 5x2x,3x,5x 加入堆。

上述做法会导致堆中出现重复元素的情况。为了避免重复元素&#xff0c;可以使用哈希集合去重&#xff0c;避免相同元素多次加入堆。

在排除重复元素的情况下&#xff0c;第 n 次从最小堆中取出的元素即为第 n个丑数。

class Solution
public int nthUglyNumber(int n)
int[] factors &#61; 2, 3, 5;
Set seen &#61; new HashSet();
PriorityQueue heap &#61; new PriorityQueue();
seen.add(1L);
heap.offer(1L);
int ugly &#61; 0;
for (int i &#61; 0; i long curr &#61; heap.poll();
ugly &#61; (int) curr;
for (int factor : factors)
long next &#61; curr * factor;
if (seen.add(next))
heap.offer(next);



return ugly;

这个题还可以使用dp来做&#xff0c;后面再说。





推荐阅读
  • java线程池的实现原理源码分析
    这篇文章主要介绍“java线程池的实现原理源码分析”,在日常操作中,相信很多人在java线程池的实现原理源码分析问题上存在疑惑,小编查阅了各式资 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文介绍了如何通过维持两个堆来获取一个数据流中的中位数。通过使用最大堆和最小堆,分别保存数据流中较小的一半和较大的一半数值,可以保证两个堆的大小差距为1或0。如果数据流中的数量为奇数,则中位数为较大堆的最大值;如果数量为偶数,则中位数为较大堆的最大值和较小堆的最小值的平均值。可以使用优先队列来实现堆的功能。本文还提供了相应的Java代码实现。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
author-avatar
手机用户2502907707
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有