当前位置: 首页 > news >正文

算法 - 剑指Offer 丑数

题目

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

解题思路

这题我使用最简单方法去做, 首先我们可以获取所有2n,3n,5*n的丑数,只是我们这里暂时无法排序,并且可能存在重复数字的问题, 重复数字用set集合去去重就可以了, 排序问题使用了最小堆去处理这个问题, 最小堆弹出的值一定是所有值中最小的数字, 然后我们弹出n次,第n次弹出的值就是我们需要的值也就是结果,下面就是代码实现。

Java代码实现

import java.util.HashSet;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;
public class NthUglyNumber {public int nthUglyNumber(int n) {//最小堆//这里使用long是为了解决Int超过最大值的问题Queue<Long> queue = new PriorityQueue();Set<Long> set = new HashSet();int[] nums = {2,3,5};int res = 1;queue.add(1L);set.add(1L);for (int i = 0; i < n; i++) {long head = queue.poll();res = (int)head;for (int nu: nums) {long tmp = nu * head ;if(!set.contains(tmp)){set.add(tmp);queue.add(tmp);}}}return  res;}
}
http://www.lryc.cn/news/30985.html

相关文章:

  • 【ONE·C || 文件操作】
  • cmd窗口中java命令报错。错误:找不到或无法加载主类 java的jdk安装过程中踩过的坑
  • Breathwork(呼吸练习)
  • taobao.itemprops.get( 获取标准商品类目属性 )
  • QT配置安卓环境(保姆级教程)
  • 【uni-app教程】八、UniAPP Vuex 状态管理
  • 同花顺测试面经(30min)
  • C++-简述#ifdef、#else、#endif和#ifndef的作用
  • VictoriaMetrics 集群部署
  • 【基于感知损失的无监督泛锐化】
  • 在vercel上用streamlit部署网站
  • 华为OD机试题 - 斗地主(JavaScript)| 含思路
  • i.MX8MP平台开发分享(clock篇)-计算clock速度相关的内核API
  • 实验4 设计模式实验3
  • CNN基础
  • 【UEFI基础】UEFI事件介绍
  • Markdown 语法速查表
  • 【C++】-- 类型转换
  • 汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
  • C++多线程--线程安全的单例模式
  • (Android-RTC-9)PeerConnectionFactory
  • Vector - CAPL - 定时器函数和使用
  • 【嵌入式C】常见问题
  • [神经网络]Transfomer架构
  • C++之多态 虚函数表
  • AI_Papers周刊:第四期
  • A Simple Framework for Contrastive Learning of Visual Representations阅读笔记
  • mac安装开发工具:clipy、iterm2、go、brew、mysql、redis、wget等
  • DJ1-1 计算机网络和因特网
  • [1.3.3]计算机系统概述——系统调用