剑指offer——49
丑数
因子只含2,3,5的数称为丑数。
怎么求第K大的丑数呢。K可以为10^7
最简单的做法是,对每个数判断是否为丑数。 复杂度为O( n * log(n) ),理论上是不行的。
uglys[i] 来保存所有丑数,uglys[0] = 1
因为要按从小到大产生一个新的丑数。这个丑数必然为之前某个丑数乘2或者乘3或者乘5。
我们维护三个index。
index_2:表示使得uglys[index_2] * 2 大于当前最大丑数时的最小下标。
index_3:表示使得uglys[index_3] * 3 大于当前最大丑数时的最小下标。
index_5:表示使得uglys[index_5] * 5 大于当前最大丑数时的最小下标。
而新产生的丑数必然为uglys[index_2]、 uglys[index_3]、uglys[index_5]中最小的一个。
而维护这三个下标,只要不停+1,直到大于当前最大丑数即可。
#include <stdio.h>
#include <iostream>
using namespace std; class Solution {
public:
int my_min(int x1, int x2) {
if (x1 < x2) return x1;
return x2;
} int GetUglyNumber_Solution(int index) {
int* uglys = new int[];
int ugly_cnt = ;
uglys[ugly_cnt++] = ;
int index_2 = ;
int index_3 = ;
int index_5 = ; while (ugly_cnt < index) {
while (uglys[index_2] * <= *(uglys + ugly_cnt - )) {
index_2++;
} while (uglys[index_3] * <= uglys[ugly_cnt - ]) {
index_3++;
} while (uglys[index_5] * <= uglys[ugly_cnt - ]) {
index_5++;
} int min_ugly = my_min(uglys[index_2] * , my_min(uglys[index_3] *, uglys[index_5] * ));
uglys[ugly_cnt++] = min_ugly;
} printf("%d\n", uglys[ugly_cnt - ]); delete[] uglys;
return ;
}
}; int main() {
Solution so;
int n;
cin >> n;
so.GetUglyNumber_Solution(n);
return ;
}
剑指offer——49的更多相关文章
- 剑指 Offer 49. 丑数 + 小根堆 + 动态规划
剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...
- 力扣 - 剑指 Offer 49. 丑数
题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小 ...
- 【Java】 剑指offer(49) 丑数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 我们把只包含因子2.3和5的数称作丑数(Ugly Number). ...
- 每日一题 - 剑指 Offer 49. 丑数
题目信息 时间: 2019-07-03 题目链接:Leetcode tag:动态规划 小根堆 难易程度:中等 题目描述: 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求 ...
- 剑指Offer 49. 把字符串转换成整数 (字符串)
题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...
- [剑指Offer] 49.把字符串转换成整数
题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 [思路]考虑所有特殊情况 1.数字前面有空格,如s=" 12 ...
- [剑指offer] 49. 丑数
通俗易懂的解释: 首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那 ...
- 剑指offer——49礼物的最大价值
题目描述 在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格,知道到达棋盘的右下角.给定一个棋盘及其上面 ...
- 剑指 Offer 49. 丑数
题目描述 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求按从小到大的顺序的第 n 个丑数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, ...
随机推荐
- 大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)
摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如 ...
- Spock集成入门
本文基于SpringBoot 在pom.xml添加Spock依赖 <!-- test --> <dependency> <groupId>org.codehaus. ...
- nodejs npm 使用淘宝 NPM 镜像
使用淘宝 NPM 镜像 大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像. 淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读), ...
- Activity优化几个结束的方法
package com.itau.jingdong; import java.util.Stack; import android.app.Activity; import android.app.A ...
- [Learn AF3]第六章 App Framework 3.0中的内置矢量图标
AF3的内置矢量图标 介绍:要使用af3中的图标,必须首先引入icon.css,由于文件中已经内置了字体文件数据,因此不需要引入字体文件支持. <link rel="styleshee ...
- .NET条形码
建议不要用CODE-39码,改用CODE-128码: CODE-39码密度比较低,条码数字内容太多,导致条码太长,缩短长度就只能减小X尺寸,造成识读困难: CODE-128码密度高,相同的数字生成条码 ...
- UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串.其声明如下, #include <stdlib.h> int system( ...
- vuex在页面中以对象展开运算符形式引入报错解决
当页面中以mapGetters等对象扩展运算符写的时候,会报错 unexpected token 解决如下: babel还要加插件才能解释这个写法 npm install --save-dev bab ...
- Java基础之深入理解Class对象与反射机制
深入理解Class对象 RRIT及Class对象的概念 RRIT(Run-Time Type Identification)运行时类型识别.在<Thinking in Java>一书第十四 ...
- 详解ABBYY FineReader 12内置的自动化任务
要使用ABBYY FineReader处理文档,需要完成四个步骤:获取文档图像>识别该文档>验证结果>以选取的格式保存结果.如果需要再三地重复相同的步骤,您可以使用ABBYY Fin ...