LeetCode[313]超级丑数

news2024/11/17 10:58:10

难度:中等

题目:

超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。
给你一个整数 n 和一个整数数组 primes ,返回第 n 超级丑数
题目数据保证第 n 超级丑数32-bit 带符号整数范围内。

示例 1:

输入:n = 12, primes = [2,7,13,19]输出:32

解释:给定长度为 4 的质数数组 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。


示例 2:

输入:n = 1, primes = [2,3,5]

输出:1

解释:1 不含质因数,因此它的所有质因数都在质数数组 primes = [2,3,5] 中。


提示:

  • 1 <= n <= 105

  • 1 <= primes.length <= 100

  • 2 <= primes[i] <= 1000

  • 题目数据 保证 primes[i] 是一个质数

  • primes 中的所有值都 互不相同 ,且按 递增顺序 排列


Related Topics

  • 数组

  • 数学

  • 动态规划


重点!!!解题思路

可先看前面讲过的LeetCode[264]丑数II,看看有没有灵感

再看看LeetCode[17.09]第k个数,都是相似题

第一步:

首先明确解题手段
我们之前的丑数题的质因子都是给定的,所以我们可以用堆来添加每轮的丑数
但是这道超级丑数题并没有给定质因子,我们并不知道一共几个质因子
所以我们这道题并不能使用堆来解决,只能用老办法数组来试试。

第二步:

我们也是在给定质因子中找出每轮的最小丑数
找到每轮的最小丑数之后,将它添加到集合中去,
添加到集合中去后进行下一轮判断,直到找到第n个位置为止。

讲解+源码:

class Solution {
    public int nthSuperUglyNumber(int n, int[] primes) {
        int[] p=new int[primes.length];//记录质因子出现的次数,出现一次就让p[i]++
        List<Long> data=new ArrayList<>();//丑数序列集合
        data.add(1L);//第一个丑数为1
        long ans=1L;
        while (data.size()!=n){
            ans=primes[0]*data.get(p[0]);//拿到本轮的预计最小丑数
            for (int i=1;i<primes.length;i++){//第一个质因子被用了,所以下标从1开始
                ans=Math.min(ans,primes[i]* data.get(p[i]));//拿到本轮的丑数
            }
            for (int i=0;i<primes.length;i++){//这个循环增加每次循环丑数的下标,避免重复
                if (primes[i]*data.get(p[i])==ans) p[i]++;
            }
            data.add(ans);//添加每轮出现的丑数
        }
        return (int) ans;
    }
}

运行结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧

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

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

相关文章

C++ 类和对象(三)

类和对象&#xff08;一&#xff09; 类和对象&#xff08;二&#xff09; 日期类 目录 一. 再谈构造函数 1.构造函数体赋值 2.初始化列表 3.隐式类型转换与explicit关键字 4.C11优化 二. static成员 1.概念 2.特性 三. 友元 1.友元函数 2.友元类 四. 内部…

Java 如何设计一款小游戏详细讲解(二)

继续上面(一)&#xff0c;Java 如何设计一款小游戏详细讲解(一)步骤步骤一接下来我们主要完成GameJFrame&#xff0c;就是拼图游戏的界面及代码。这里接下来完成菜单的设置&#xff0c;将主界面的代码放到一个方法中&#xff0c;像下面这样&#xff0c;接下来我们书写菜单的代码…

基于Python实现种差值方法(完整代码详细教程)

三种插值方法都是使用Python自己实现的。1.1 最近邻插值寻找每个中心点周围的八个点中有无未丢失的点&#xff0c;如果有的话就赋值为第一个找到的点&#xff0c;如果没有就扩大范围再次寻找&#xff0c;在最大范围内都找不到的话就跳过。1.2 双线性插值使用解方程的方法求解&a…

(十八)Threads异步和多线程(Thread、Threadpool、Task)-语言进阶2

Threads异步和多线程-语言进阶2一、Thread1. 线程启动2. 线程等待3.前台线程/后台线程4.扩展thread封装回调二、Threadpool1.线程池2.线程池使用3.ManualResetEvent 线程池等待三、Task1. Task启动方式2.waitall 、waitany1.waitall2.waitany3.WaitAll、waitany场景4. 应用&…

Spring为什么这么火 之 Spring的创建及存储、获取Bean对象

目录 1、创建Spring项目 1.1、创建一个Maven项目 1.2、添加Spring框架支持 1.3、添加启动类 2、存储Bean对象 2.1、创建Bean对象 2.2、将Bean对象注册到Spring容器中 3、获取、使用Bean对象 3.1、得到Spring上下文对象 使用ApplicationContext作为Spring的上下文 【更…

服务器相关命令(docker相关)

一:安装docker 之前安装过旧版本&#xff0c;使用以下命令可以卸载(整个copy过去): yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-e…

AOP面向切面编程

AOP 面向切面编程 AOP是什么 AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续&#xff0c;是软件开发中的一个热点&#xff0c;是 j…

【Linux】-- 环境变量

目录 环境变量 常见环境变量 HOME 和环境变量相关的命令 通过代码如何获取环境变量 环境变量参数 通过第三方变量environ获取 通过getenv函数来特定访问获取 通过setenv函数来特定访问获取 环境变量 命令&#xff1a;which ls 将命令ls的完整路径写入到标准输出。 #in…

用R语言理解洛必达法则

文章目录5 洛必达法则极限的种类洛必达法则作用于幂函数5 洛必达法则 极限的种类 令NNN为常数&#xff0c;则常规的极限运算大致有以下几种 ∞N∞∞⋇N∞(N̸0)N∔∞∞N−∞−∞N/∞0N/0∞N∞∞(N̸1)∞N∞(N̸0)\begin{matrix} &\infty\pm N\infty\quad&\infty\divi…

MySQL版本由5.7.37更新到5.7.39

一、前景 由于mysql5.7.37存在漏洞&#xff0c;影响系统安全&#xff0c;所以需要将mysql版本升级到5.7的最新版本5.7.39。 二、步骤 1、下载5.7.39的安装包&#xff1a; 下载链接如下&#xff1a; https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-1.el…

node基础知识

node基础知识 node在真实项目中的应用 webpack基于node环境 用nodejs的语法合并压缩打包 js放到客户端浏览器中执行 放到服务器端运行&#xff1a;java因为jdk php因为tomcat c#因为有.net framework 项目架构1&#xff1a;中小型项目-基于nodejs构建全栈 项目架构2&#xff1a…

mysql转DM达梦数据库+springboot兼容DM数据库+springboot兼容activity5.22.0

由于现在做的项目中需要针对数据库进行国产化操作&#xff0c;最终完成从mysql到达梦的迁移&#xff0c;记录整合迁移记录如下&#xff1a;安装初始化达梦数据库&#xff08;傻瓜式安装即可&#xff09;安装达梦数据库&#xff08;windows、linux&#xff09;初始化数据库实例关…

代码质量与安全 | 新时代:2023年商业软件开发的五大关键目标

进入2023年&#xff0c;技术趋势仍然聚焦于人工智能、边缘智能和气候变化领域&#xff0c;但供应链增速放缓和日益增长的消费者需求阻碍着创新的步伐。为了在行业中保持竞争力&#xff0c;并实现软件工程预定目标&#xff0c;软件开发领导者需要主动制定预算和时间管理计划&…

Java设计模式-模板模式Template

介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式(Template Pattern)&#xff0c;z 在一个抽象类公开定义了执行。它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。简单说&#xff…

中移链合约常用开发介绍 (二)多索引表的使用

一、目的本文详细介绍了开发、部署和测试一个地址簿的智能合约的流程&#xff0c;适用于EOS的初学者了解如何使用智能合约实现本地区块链上数据的持久化和对持久化数据的增删改查。二、智能合约介绍区块链作为一种分布式可信计算平台&#xff0c;去中心化是其最本质的特征。每笔…

17.Isaac教程--机器学习流程

机器学习流程 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录机器学习流程模拟训练PC 和边缘设备上的推理使用 TensorRT 进行推理Torch推理使用 Tensorflow 进行推理示例PyCodelet配套代码Tensorflow 推理小码TensorRT 推理小码SampleAc…

23种设计模式(三)——模板方法模式【组件协作】

文章目录意图什么时候使用模板方法真实世界类比常说的钩子模板方法的实现模板方法模式的优缺点亦称&#xff1a; Template Method 意图 它的主要思想是&#xff0c;定义一个操作的一系列步骤&#xff0c;对于某些暂时确定不下来的步骤&#xff0c;就留给子类去实现好了&#x…

位图与矢量图的区别

相信大家在日常的工作过程中&#xff0c;经常会听到位图和矢量图&#xff0c;那么位图和矢量图的区别是什么呢&#xff1f; 1.定义 ①位图&#xff1a;称为点阵图像或栅格图像&#xff0c;是由称作像素&#xff08;图片元素&#xff09;的单个点组成的。这 些点可以进行不同的排…

测试用例设计方法有哪些?举例说明

众所周知&#xff0c;测试用例是编制的一组测试输入、执行条件及预期结果&#xff0c;专门为的是某个特殊目标&#xff0c;即测试某个程序路径&#xff0c;或是核实是否满足某个特定的需求。一般来讲&#xff0c;常用的测试用例设计方法有五种&#xff0c;分别是&#xff1a;正…

微信小程序中如何实现双向绑定

一、双向绑定 在微信小程序中如何实现双向绑定&#xff1f;在开始之前先介绍下什么是双向绑定&#xff0c;js中定义变量数据后&#xff0c;通过{{}}绑定到模板中&#xff0c;这个过程是单向绑定&#xff0c;即数据的更新只能是js中更新了数据&#xff0c;模板中跟着修改。但是如…