Ugly number丑数2,超级丑数
[抄题]:
[思维问题]:
[一句话思路]:Long.valueOf(2)转换为long型再做
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- 取出数从i = 1开始,不用从0开始。因为第一个符合条件的数是1 。先定义number 是long1,之后再换。
[二刷]:
- primes[0] = Long.valueOf(2);这样大写 Long[]表示长数组的类型
- queue用poll
- 最后返回intValue
[三刷]:
[四刷]:
[五刷]:
[总结]:
[复杂度]:Time complexity: O(nlogn) 两个都遍历时做乘法 Space complexity: O(n)(都是n)
[英文数据结构,为什么不用别的数据结构]:
随意插入:pq heap,防止重复插入:hashset
queue是接口类,可以实例化为pq
[其他解法]:
[Follow Up]:
[题目变变变]:
public class Solution {
/*
* @param n: An integer
* @return: the nth prime number as description.
*/
public int nthUglyNumber(int n) {
Queue<Long> Q = new PriorityQueue<Long>();
HashSet<Long> inQ = new HashSet<Long>();
Long[] primes = new Long[3]; primes[0] = Long.valueOf(2);
primes[1] = Long.valueOf(3);
primes[2] = Long.valueOf(5);
for (int i = 0; i < 3; i++) {
Q.add(primes[i]);
inQ.add(primes[i]);
}
Long number = Long.valueOf(1);
for (int i = 1; i < n; i++) {
number = Q.poll();
for (int j = 0; j < 3; j++) {
if (!inQ.contains(primes[j] * number)) {
Q.add(primes[j] * number);
inQ.add(primes[j] * number);
}
}
}
return number.intValue();
}
}
超级丑数
[抄题]:
写一个程序来找第 n 个超级丑数。
超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内。
比如给你 4 个质数的集合 [2, 7, 13, 19]
, 那么 [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32]
是前 12 个超级丑数。
[思维问题]:
没发现是新定义的质数,比如4,8
[一句话思路]:
引入times[]数组,用ugly[times]来表示最大的丑数
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
times[j]的统计是在每一个统计丑数i之内,都要做的
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[总结]:
[复杂度]:Time complexity: O(n^2) Space complexity: O(n)
[英文数据结构,为什么不用别的数据结构]:
不需要判断是否重复,不用hashset。
需要逐渐往上做乘法,遍历,用array合适。
[其他解法]:
[Follow Up]:
[题目变变变]:
public class Solution {
/*
* @param n: a positive integer
* @param primes: the given prime list
* @return: the nth super ugly number
*/
public int nthSuperUglyNumber(int n, int[] primes) {
if (primes == null || n <= 0) {
return 0;
}
//find min
int[]ugly = new int[n];
int[]times = new int[primes.length];
ugly[0] = 1; for (int i = 1; i < n; i++) {
int min = Integer.MAX_VALUE;
for (int j = 0; j < primes.length; j++) {
min = Math.min(min,primes[j] * ugly[times[j]]);
}
ugly[i] = min; //add times
for (int j = 0; j < primes.length; j++) {
if (primes[j] * ugly[times[j]] == min) {
times[j]++;
}
}
} return ugly[n - 1];
}
}
Ugly number丑数2,超级丑数的更多相关文章
- [Swift]LeetCode313. 超级丑数 | Super Ugly Number
Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...
- 313 Super Ugly Number 超级丑数
编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...
- leetcode 264. 丑数 II 及 313. 超级丑数
264. 丑数 II 题目描述 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, ...
- java算法之超级丑数
问题描述: 写一个程序来找第 n 个超级丑数. 超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内. 比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [ ...
- Leetcode 313.超级丑数
超级丑数 编写一段程序来查找第n个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13,19] ...
- [Leetcode] 第313题 超级丑数
一.题目描述 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13, ...
- Java实现 LeetCode 313 超级丑数
313. 超级丑数 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7, ...
- Java [Leetcode 263]Ugly Number
题目描述: Write a program to check whether a given number is an ugly number. Ugly numbers are positive n ...
- Ugly Number II leetcode java
问题描述: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime fa ...
随机推荐
- 第3章 文件I/O(8)_贯穿案例:构建标准IO函数库
9. 贯穿案例:构建标准IO函数库 //mstdio.h #ifndef __MSTDIO_H__ #define __MSTDIO_H__ #include <unistd.h> #de ...
- 第10课 C++中的新成员
1. 动态内存分配 (1)C++通过new关键字进行动态内存申请,是以类型为单位来申请空间大小的 (2)delete关键字用于内存释放 ▲注意释放数组时要加[],否则只释放这个数组中的第1个元素. [ ...
- 【BZOJ】1013 [JSOI2008]球形空间产生器sphere(高斯消元)
题目 传送门:QWQ 分析 高斯消元就是个大暴力.... 代码 #include <bits/stdc++.h> using namespace std; ; ; int n; doubl ...
- SQL FORMAT() 函数实例
FORMAT()函数用于对字段的显示进行格式化. SQL FORMAT() 语法 SELECT FORMAT(column_name,format) FROM table_name; 参数 描述 co ...
- 并发基础(六) 线程Thread类的start()和run()
start()和run()方法对于刚接触线程的人来说,会有点混淆,有点难理解,一般都会有以下疑问: 一.start( )方法 1.为什么需要start方法:它的作用是什么: start方法的作用就是将 ...
- Mysql-表关系
表关系分为三种:一对一,一对多,多对多 一对多:一个学院对应多个学生,而一个学生只对应一个学院 -- 这儿classroom 是代表的学院. -- 一对多 - A表的一条记录 对应 B 表多条记 ...
- python入门-列表
列表使用[]来标识 列表和PHP中的数组类似 包括使用和访问方式都是类似 可以用下标索引的方式直接访问 来几个例子,这样看起来才舒服 names = ['baker','pitty','david', ...
- windows巡检
参考网站: http://www.jb51.net/os/windows/525017.html 系统自带工具巡检 : 先说说如何检查系统健康度的方法,Win+R只有只要输入一个命令: perf ...
- django-allauth 使用
参考: http://www.honkerzhou.com/post/3/ https://www.jianshu.com/p/41335d861a8d https://django-allauth. ...
- jsfl 改变舞台宽高
fl.getDocumentDOM().height= 680; fl.getDocumentDOM().width= 550;