Q:

A:

用变量记录已经✖2、✖3、✖5的元素下标i2、i3、i5。表示截止到i2的元素都已经乘过2(结果添加到序列尾部的意思),i3、i5同理。这样每次可以循环可以O(1)时间找到下一个最小的丑数,时间O(N),空间O(N)。

class Solution {
public:
int nthUglyNumber(int n) {
if(n<=0){
return 0;
}
int i2=0,i3=0,i5=0;
vector<int> vec={1};
while(vec.size()<n){
int min_mul=vec[i2]*2;
min_mul=min(min_mul,vec[i3]*3);
min_mul=min(min_mul,vec[i5]*5);
if(min_mul==vec[i2]*2){
i2++;
}
if(min_mul==vec[i3]*3){
i3++;
}
if(min_mul==vec[i5]*5){
i5++;
}
vec.push_back(min_mul);
}
return vec.back();
}
};

还有一种利用堆的方法,堆初始只有一个元素1,第一次循环:堆顶元素1分别✖2、3、5,结果加入堆,堆顶元素1就是第一个丑数,pop掉。这样堆还剩2、3、5。第二次循环:堆顶元素2分别✖2、3、5,结果加入堆,堆顶元素2就是第二个丑数。

这样循环n次,最终会找到第n个丑数。时间O(NlogN),空间O(N)。

Q:

A:

之前是2、3、5,现在是给定了primes.size()个数。那么就建一个数组pos,其中pos[i]指明结果序列中已经乘了primes[i]的最小下标,和上一题类似。

class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
if(n<=0){
return 0;
}
vector<int> vec={1};
vector<int> pos(primes.size(),0);
while(n>1){
--n;
int nex=INT32_MAX;
for(int i=0;i<primes.size();++i){
nex=min(nex,vec[pos[i]]*primes[i]);
}
for(int i=0;i<primes.size();++i){
if(nex==vec[pos[i]]*primes[i]){
pos[i]++;
}
}
vec.push_back(nex);
}
return vec.back();
}
};

Leetocde的两道丑数题目:264. 丑数 II➕313. 超级丑数的更多相关文章

  1. leetcode 264. 丑数 II 及 313. 超级丑数

    264. 丑数 II 题目描述 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, ...

  2. Java实现 LeetCode 313 超级丑数

    313. 超级丑数 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7, ...

  3. Leetcode 313.超级丑数

    超级丑数 编写一段程序来查找第n个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13,19] ...

  4. 263. Ugly Number + 264. Ugly Number II + 313. Super Ugly Number

    ▶ 三个与丑数相关的问题 ▶ 第 263题,判定一个数字是否是丑数,即其素因子是否仅由 2,3,5 构成. ● 常规消除判别,4 ms class Solution { public: bool is ...

  5. 两道人数多,课程少,query多的题

    #每天进步一点点# 来两道很相似的题目~ (智商啊智商.....) hihoCoder #1236:Scores (简单的分桶法+bitset) 2015 Beijing Online的最后一题.题目 ...

  6. [LeetCode] 313. Super Ugly Number 超级丑陋数

    Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...

  7. 两道很好的dp题目【4.29考试】

    A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现 ...

  8. leetcode简单题目两道(2)

    Problem Given an integer, write a function to determine if it is a power of three. Follow up: Could ...

  9. Ugly number丑数2,超级丑数

    [抄题]: [思维问题]: [一句话思路]:Long.valueOf(2)转换为long型再做 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图 ...

随机推荐

  1. ubuntu设置ulimit

    centos系统的设置ulimit的时候是直接修改/etc/security/limits.conf文件,但是在ubuntu中却不行, ubuntu先修改/etc/security/limits.co ...

  2. 在vue项目中使用MD5.js

    1.安装 npm install --save js-md5 2.引入 import md5 from 'js-md5'; 3.使用 md5('holle') // bcecb35d0a12baad4 ...

  3. Silver Cow Party POJ - 3268

    #include<iostream> #include<queue> #include<cstring> using namespace std; +,INF=0x ...

  4. Currency Exchange POJ - 1860 spfa判断正环

    //spfa 判断正环 #include<iostream> #include<queue> #include<cstring> using namespace s ...

  5. 疫情下的传统商企自救|4个Tips搭建销量过亿直播间

    新冠肺炎爆发以来,线下商企遭受巨大冲击.出于疫情防控需要,不少门店选择暂时停业:而消费者们更是响应号召.足不出户.这场疫情促使消费者的消费习惯和方式进一步转向线上订购转变,直播.短视频等领域逆势而起, ...

  6. win10驱动签名禁用与启动

    禁用:https://jingyan.baidu.com/article/624e74594dbc8d34e8ba5aa6.html?qq-pf-to=pcqq.c2c 启用或恢复:https://z ...

  7. BZOJ3531 SDOI2014 旅行 - 树链剖分,主席树

    题意:给定一棵树,树上每个点有权值和类型.支持:修改某个点的类型:修改某个点的权值:询问某条链上某个类型的点的和/最大值.点数/类型数/询问数<=100000. 分析: 树链剖分,对每个类型的点 ...

  8. MySQL 中like的使用对于索引的影响

    今天看了一篇对于like使用对索引的影响的文章,发现自己实践的跟文章得出结论不大一样.所以还是建议自己再看别人文章的时候自己亲自动手实践一下.以免学到不全面的知识. 列子: 先建立一张表: -- 创建 ...

  9. Appium+Python+Pycharm如何创建并运行自动化测试脚本【真机运行】

    一.将测试机连接电脑,手机上会有一些提示,总之都允许就可以了,开始USB调试模式,之后打开cmd,输入adb devices,查看手机是否成功连接,如下图所示: 上图中可以看到,有一台设备已经成功连接 ...

  10. AntDesign(React)学习-12 使用Table

    AntDesign(Vue)版的Table中使用图片https://www.cnblogs.com/zhaogaojian/p/11119762.html 之前在使用VUE版Table时,使用大图片时 ...