313. 超级丑数

超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 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] 中。

解题思路(最小堆)

使用优先队列,逐个生成超级丑数,那么生成的第n小的丑数,就是我们需要的

代码

class Solution {public int nthSuperUglyNumber(int n, int[] primes) {PriorityQueue<Long> priorityQueue=new PriorityQueue<>();priorityQueue.add(1L);Set<Long> set=new HashSet<>();set.add(1L);int i=0;while (!priorityQueue.isEmpty()){long cur = priorityQueue.poll();if (++i==n)return (int) cur;for (int prime : primes) {if (set.contains(cur*prime))continue;set.add(cur*prime);priorityQueue.add(cur*prime);}}return -1;}
}

解题思路(dp)

  1. 使用动态规划,dp[i]代表第i个丑数
  2. 这题类似与丑数二,我们需要对质数数组中的每个质数,维护一个指针,指向第p[i]个丑数,因为在朴素的做法中,需要对丑数乘以所有质数数组中的数字,所以我们维护的指针数组作用就是表示:第p[j]-1个丑数*primes[j]的结果已经加入dp数组了,现在需要加入dp数组的是p[j]个丑数 * primes[j]

代码

class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp = new int[n+1];int[] p=new int[primes.length];Arrays.fill(p,1);dp[1]=1;for (int i=2;i<=n;i++){int min=Integer.MAX_VALUE;for (int j = 0; j < primes.length; j++) {min= Math.min(min,primes[j]*dp[p[j]]);}dp[i]=min;for (int j = 0; j < primes.length; j++) {if(primes[j]*dp[p[j]]==min){p[j]++;}}}return dp[n];}
}

image.png

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

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

相关文章

初创公司股本结构_我如何向初创公司的开发团队添加一些结构-以及从过程中学到的东西

初创公司股本结构Until recently, Id spent the last 4 years of my career at FinTech start-ups. Id always worked for smaller companies, and being at a start-up was the next logical step in looking for roles where I could make the biggest difference. 直到最近…

拿什么拯救你,我的面试之——从零打卡刷Leetcode(No.003)

写在前边&#xff1a;小詹一直觉得自己编程能力不强&#xff0c;想在网上刷题&#xff0c;又怕不能坚持。不知道有木有和小伙伴和小詹一样想找个人一起刷题呢&#xff1f;欢迎和小詹一起定期刷leetcode&#xff0c;每周一周五更新一题&#xff0c;每一题都吃透&#xff0c;欢迎…

146. LRU 缓存机制

146. LRU 缓存机制 运用你所掌握的数据结构&#xff0c;设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回…

[SQL] 请教一下 count里面有case when 一般情况下啥时候用

http://www.itpub.net/forum.php?modviewthread&tid1810967 问题: 比如 count(case when pday_id${deal_date} then 1 end) 我有点想不明白具体什么情况下count&#xff08;&#xff09; 这个小括号里面还要用case when 大家做BI统计的时候一般什么情况用啊 还有个…

路由器架设虚拟服务器让外网访问到本地网站

确定电脑与路由器正确连接&#xff0c;并且已连至互联网。在地址栏中输入192.168.0.1回车&#xff0c;输入用户名密码&#xff0c;进入路由器主界面。 然后点击左侧菜单中的“虚拟服务器”&#xff0c;——“端口段映射”打开“端口段映射”界面。 由于网站用的是80端口&#x…

vue项目示例代码git_您应该了解的5个Git命令以及代码示例

vue项目示例代码gitIve used Git for some years now, and I still find myself googling how to do some basic tasks. So this article is my attempt to learn how to do some of these things by writing about them. And even if I still forget, at least Ill have a ref…

413. 等差数列划分

413. 等差数列划分 如果一个数列 至少有三个元素 &#xff0c;并且任意两个相邻元素之差相同&#xff0c;则称该数列为等差数列。 例如&#xff0c;[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums &#xff0c;返回数组 nums 中所有为等差数组…

山羊与汽车游戏的实验算法

实验1&#xff1a; function shuffle(target) {var j, x, i target.length;for (; i > 0; j parseInt(Math.random() * i), x target[--i], target[i] target[j], target[j] x) {}return target }function removeAt(target, index) {return !!target.splice(index, 1).…

selenium模块

selenium模块 阅读目录 一 介绍二 安装三 基本使用四 选择器五 等待元素被加载六 元素交互操作七 其他八 项目练习一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器&#xff0c;完…

关闭iphone来电mac_如何在Mac和iPhone上关闭通用剪贴板切换(以及为什么要禁用此功能)

关闭iphone来电macIm about to tell you something that will shock you, and probably make you very angry. I hope you wont hate me for it. Here goes.我正要告诉您一些令您震惊的事情&#xff0c;并可能使您非常生气。 我希望你不会为此而恨我。 开始。 If you are an i…

关于tomcat Post 数据参数的问题

2019独角兽企业重金招聘Python工程师标准>>> POST请求本身并未限制传入参数大小&#xff0c;是tomcat 容器设置了接收参数大小的限制。修改server.xml <Connector port"8080" protocol"HTTP/1.1" connectionTimeout"2000" red…

iOS:通信录(完成)(18-01-18更)

1、读取通信录 1&#xff09;、9.0以前&#xff1a;AddressBook 2&#xff09;、9.0以后&#xff1a;Contacts 2、调用通信录UI&#xff08;不弄&#xff09; 1&#xff09;、9.0以前&#xff1a;AddressBookUI 2&#xff09;、9.0以后&#xff1a;ContactsUI 3、参考 0、写在前…

如何在React Native和Firebase中设置Google登录

Google sign-in is a great login feature to offer to your apps users. It makes it easier for them to create an account and sign in. Google登录是一项出色的登录功能&#xff0c;可为您的应用程序用户提供。 这使他们更容易创建帐户并登录。 And whats even better, F…

设计模式-发布订阅模式

这段时间在看vue的双向绑定原理&#xff0c;知道了vue的核心三大件&#xff1a;Observer, Complie, Watcher。 Observer用于监听属性的变化&#xff0c;如有变动就通知 Watcher。 Compile负责解析元素节点的指令&#xff0c;如v-if&#xff0c;v-bind之类, 进行数据和回调函数的…

杜教筛--51nod1239 欧拉函数之和

求$\sum_{i1}^{n}\varphi (i)$&#xff0c;$n\leqslant 1e10$。 这里先把杜教筛的一般套路贴一下&#xff1a; 要求$S(n)\sum_{i1}^{n}f(i)$&#xff0c;而现在有一数论函数$g(i)$&#xff0c;$g(i)$的前缀和很无脑&#xff0c;且$f$和$g$的狄利克雷卷积的前缀和很无脑&#xf…

【Android Studio安装部署系列】目录

概述 从刚开始使用Android Studio到现在&#xff0c;下面所有目录下的操作&#xff0c;当时习惯性的把每一个整理成一个文档&#xff08;其实就是简单文字描述截图&#xff09;&#xff1b;有些地方当时是一知半解&#xff0c;现在会稍微明白一些。正好赶上现在有时间。所以就想…

修改npm全局安装模式的路径

修改npm全局安装模式的路径 在正式写此文章之前&#xff0c;我得说一点血泪史。 刚学nodeJS不久&#xff0c;很纳闷为什么全局安装的模块在 node安装目录/node_modules‘ 中没找到&#xff01;后来仔细看了下安装成功后的信息&#xff0c;才发现原来是自动安装在C盘了&#xff…

javascript创建类_如何使用JavaScript创建吹气效果

javascript创建类Have you ever wondered how you can create a realistic air blowing effect with JavaScript? Like the one shown on the evening TV shows, where multiple balls are being mixed up in a sphere-like object by leveraging air pressure? If you want …

Bootstrap 4:如何使顶部固定的Navbar保持在容器中而不拉伸?

There are many ways to make a fixed navbar stay inside a parents div container. Well go over the most straightforward one here.有很多方法可以使固定的导航栏停留在父级的div容器中。 我们将在这里介绍最简单的方法。 Imagine you have the following code, modified…

基于SpringBoot+Mybatis+Thymeleaf商品信息管理系统

github地址&#xff1a;github.com/zaiyunduan1…,如果对你有帮助&#xff0c;欢迎Star 主要用到的技术&#xff1a; 使用maven进行项目构建使用SpringbootMybatis搭建整个系统使用Thymeleaf模板技术实现页面静态化使用框架Bootstrap、JQuery开发前端界面使用MySQL和MongoDB分别…