[剑指offer]面试题第[49]题[Leetcode][第264题][JAVA][丑数][动态规划][堆]
【问题描述】[中等]
【解答思路】
1. 动态规划
时间复杂度:O(N) 空间复杂度:O(N)
class Solution {public int nthUglyNumber(int n) {int a = 0, b = 0, c = 0;int[] dp = new int[n];dp[0] = 1;for(int i = 1; i < n; i++) {int n2 = dp[a] * 2, n3 = dp[b] * 3, n5 = dp[c] * 5;dp[i] = Math.min(Math.min(n2, n3), n5);if(dp[i] == n2) a++;if(dp[i] == n3) b++;if(dp[i] == n5) c++;}return dp[n - 1];}
}作者:jyd
链接:https://leetcode-cn.com/problems/chou-shu-lcof/solution/mian-shi-ti-49-chou-shu-dong-tai-gui-hua-qing-xi-t/
2. 堆
时间复杂度:O(N) 空间复杂度:O(1)
class Solution {public int nthUglyNumber(int n) {PriorityQueue<Long> pq = new PriorityQueue<>();Set<Long> s = new HashSet<>();//初始化,放进堆和set,发现1要开Long数组才可以long[] primes = new long[]{2, 3, 5};for (long prime : primes) {pq.offer(prime);s.add(prime);}long num = 1;for (int i = 1; i < n; i++) {num = pq.poll();//遍历三个因子for (int j = 0; j < 3; j++) {if (!s.contains(num * primes[j])) {pq.offer(num * primes[j]);s.add(num * primes[j]);}}}return (int) num;}
}作者:jerry_nju
链接:https://leetcode-cn.com/problems/chou-shu-lcof/solution/dui-he-dong-tai-gui-hua-si-lu-xiang-jie-by-jerry_n/
【总结】
1.动态规划流程
第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩
2.优先队列 按大小弹出 溢出问题long 去重set
参考链接:
https://leetcode-cn.com/problems/chou-shu-lcof/solution/dui-he-dong-tai-gui-hua-si-lu-xiang-jie-by-jerry_n/
参考链接:https://leetcode-cn.com/problems/chou-shu-lcof/solution/mian-shi-ti-49-chou-shu-dong-tai-gui-hua-qing-xi-t/
[剑指offer]面试题第[49]题[Leetcode][第264题][JAVA][丑数][动态规划][堆]相关推荐
- [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]
[问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...
- [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]
[剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...
- 剑指offer——面试题49:把字符串转换成整数
剑指offer--面试题49:把字符串转换成整数 Solution1: 代码写的啰嗦,但思路清晰..LeetCode上有相似的题目并考虑了溢出,可以参考LeetCode8答案 class Soluti ...
- 算法题001 剑指Offer 面试题三:二维数组中的查找
剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...
- 【剑指Offer面试题】 九度OJ1510:替换空格
c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...
- 剑指offer 面试题三 找出数组中重复的数字
1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...
- (待补充)【n个骰子的点数】剑指offer——面试题43:n个骰子的点数
剑指offer--面试题43:n个骰子的点数 [注意]此题再牛客网上没有OnlineJudge,在此补充解法. 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值 ...
- (补充)【打印1到最大的n位数】剑指offer——面试题12:打印1到最大的n位数
剑指offer--面试题12:打印1到最大的n位数 此题在牛客网上没有OnlineJudge,在此补充两种做法. 参考网址:https://blog.csdn.net/yanxiaolx/articl ...
- 【有返回值的回溯】剑指offer——面试题67——机器人的运动范围(回溯法)
剑指offer--面试题67:机器人的运动范围(回溯法) Solution1: 此题和66题均是典型的回溯法题目,对比记忆思路! class Solution {public:int movingCo ...
最新文章
- 手机归属地和ip定位
- vs2013中的error c4996的问题
- Dockerizing a Node.js web app
- VBS脚本常用经典代码收集
- 神奇的问题记录【SqlDataAdapter Fill DataSet】
- Android短信发送流程之普通短信发送(原)
- 《剑指offer》答案整理
- .NET Core Community 第三个千星项目诞生:爬虫 DotnetSpider
- java文章上一篇下一篇_每个人都必须阅读的10篇Java文章
- Java实验输出希腊字母表
- html表格数据按公式自动计算,Word表格怎么自动填充和计算数据
- java中的math_Java中math类的常用方法
- 设计模式七大原则——里氏替换原则
- 安卓手机格式化怎么弄_安卓手机怎么格式化 Android手机内存卡格式化方法
- 线段树(lazy用法)
- kubectl config 命令
- 游戏里经常有涉及用户排行榜(金币消费排行榜),怎么设计一个良好的排行榜。
- 2022年测试工程师高频面试题及答案【python篇】
- [AGC004E] Salvage Robots (DP)
- 有关华为的七大猜想:或在国内屈居老二
热门文章
- React - S1
- apache cgi 模块安装
- sql where in 排序问题
- idea 错误: 找不到或无法加载主类(汇总贴)
- 日志 中文乱码、nacos 中文乱码、saltstack 中文乱码、docker中文乱码
- Spring Security 认证执行流程
- onSaveInstanceState与onRestoreInstanceState何时调用、如何使用
- 在windows 2003系统安装oracle11G出现的问题
- Oracle rman备份和还原恢复数据库
- win8.1 linux系统,电脑显示win8.1linux系统失效的原因及解决办法!