[抄题]:

[思维问题]:

[一句话思路]:Long.valueOf(2)转换为long型再做

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 取出数从i = 1开始,不用从0开始。因为第一个符合条件的数是1 。先定义number 是long1,之后再换。

[二刷]:

  1. primes[0] = Long.valueOf(2);这样大写 Long[]表示长数组的类型
  2. queue用poll
  3. 最后返回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,超级丑数的更多相关文章

  1. [Swift]LeetCode313. 超级丑数 | Super Ugly Number

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

  2. 313 Super Ugly Number 超级丑数

    编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...

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

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

  4. java算法之超级丑数

    问题描述: 写一个程序来找第 n 个超级丑数. 超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内. 比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [ ...

  5. Leetcode 313.超级丑数

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

  6. [Leetcode] 第313题 超级丑数

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

  7. Java实现 LeetCode 313 超级丑数

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

  8. Java [Leetcode 263]Ugly Number

    题目描述: Write a program to check whether a given number is an ugly number. Ugly numbers are positive n ...

  9. Ugly Number II leetcode java

    问题描述: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime fa ...

随机推荐

  1. Linux网络编程经典书籍推荐

    UNIX环境高级编程<高级unix环境编程><unix网络编程><深入理解计算机系统>比较好 =====================Linux网络编程经典书籍推 ...

  2. API网关Kong系列(四)认证配置

    目前根据业务需要先介绍2种认证插件:Key Authentication 及 HMAC-SHA1 认证  Key Authentication 向API添加密钥身份验证(也称为API密钥). 然后,消 ...

  3. Scrapyd发布爬虫的工具

    Scrapyd Scrapyd是部署和运行Scrapy.spider的应用程序.它使您能够使用JSON API部署(上传)您的项目并控制其spider. Scrapyd-client Scrapyd- ...

  4. eventql操作脚本

    a) standalone mode mkdir -p /var/evql/standalone/usr/local/bin/evqld --standalone --datadir /var/evq ...

  5. python判断变量是否为int、字符串、列表、元组、字典等方法

    在实际写程序中,经常要对变量类型进行判断,除了用type(变量)这种方法外,还可以用isinstance方法判断: #!/usr/bin/env pythona = 1b = [1,2,3,4]c = ...

  6. SQL Server 2016将内置R语言

    题记:随着大数据成为一个BuzzWord,和大数据相关的技术也变得越来越火热,其中就包括R语言.而据说SQL Server 2016将会内置R语言支持? R语言作为一个存在很久的语言,在大数据热炒之后 ...

  7. push(),pop(),unshift(),shift()

    1.push() 往数组末尾添加一个或多个元素,返回新的长度 2.pop() 删除数组末尾元素,数组长度减1,返回被删除的值 3.unshift() 往数组开头添加一个或多个元素,返回新的长度 4.s ...

  8. java基础:关于java流与文件操作

    1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序 ...

  9. spring 注解 @NotBlank and BingResult

    @NotEmpty用在集合类上面 @NotBlank 用在String上面 @NotNull 用在基本类型上 在 user对象中需要

  10. 11.使用ForwardAction实现页面屏蔽。

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 我们在jsp页面之间写链接总会是.../xxx.jsp,而如果我们想屏蔽掉具 ...