【剑指offer】丑数,C++实现
原创博文,转载请注明出处!
本题牛客网地址
1. 题目
2. 思路
空间换时间的方法。由于题目要求按序查找丑数,可以采用辅助容器vector按序存储丑数,返回指定位置丑数的策略。用辅助容器vector按序存储丑数的关键在于怎么按序计算丑数。按序计算丑数的方法:设辅助变量t2为一个丑数在vector中的索引,t2位置之前的丑数*2之后小于等于最大丑数,t2位置及t2位置之后的丑数*2后大于最大丑数。设辅助变量t3为一个丑数在vector中的索引,t3位置之前的丑数*3之后小于等于最大丑数,t3位置及t3位置之后的丑数*3后大于最大丑数。设辅助变量t5为一个丑数在vector中的索引,t5位置之前的丑数*5之后小于等于最大丑数,t5位置及t5位置之后的丑数*5后大于最大丑数。min(t2位置的丑数*2,t3位置的丑数*3,t5位置的丑数*5)即为最大丑数p后面的丑数q。
举例:
思路总结如下:
- 特殊输入
- 由于1,2,3,4,5,6都是丑数,那么如果index<7时,直接输出index即
- 辅助空间
- vector:用vector存储按序生成的丑
- 辅助变量
- t2:t2位置之前的丑数*2之后 ≤ 最大丑数,t2位置的丑数*2之后 > 最大丑数
- t3:t3位置之前的丑数*3之后 ≤ 最大丑数,t3位置的丑数*3之后 > 最大丑数
- t5:t5位置之前的丑数*5之后 ≤ 最大丑数,t5位置的丑数*5之后 > 最大丑
- 按序计算丑数
- 按序计算最大丑数
- 最大丑数 = min(vec[t2]*2,vec[t3]*3,vec[t5]*5)
- 更新三个辅助变量
- 当vec[t2]*2 == 最大丑数时,证明最大丑数 = t2位置的丑数 * 2,不满足t2的定义。
- 当vec[t3]*3 == 最大丑数时,证明最大丑数 = t3位置的丑数 * 3,不满足t3的定义。
- 当vec[t5]*5 == 最大丑数时,证明最大丑数 = t5位置的丑数 * 5,不满足t5的定义。
3. 代码
1 class Solution {
2 public:
3 int GetUglyNumber_Solution(int index) {
4
5 // 特殊输入
6 if(index<7) return index;
7
8 // 辅助容器
9 vector<int> res(index);
10 for(int i = 0;i<6;i++)
11 res[i] = i+1;
12
13 // 辅助变量
14 int t2=3;
15 int t3=2;
16 int t5=1;
17
18 // 按序计算丑数
19 for(int i =6;i<index;i++)
20 {
21 res[i] = min(res[t2]*2,min(res[t3]*3,res[t5]*5));
22
23 if(res[i] == res[t2] * 2 ) t2++;
24 if(res[i] == res[t3] * 3 ) t3++;
25 if(res[i] == res[t5] * 5 ) t5++;
26 }
27 return res[index-1];
28 }
29 };
【剑指offer】丑数,C++实现的更多相关文章
- 剑指Offer——丑数
剑指Offer--丑数 前言 参照<剑指Offer>,通过洞悉其思想并消化吸收,改为java实现,供自己以后巩固. package cn.edu.ujn.offersword; i ...
- 剑指Offer丑数问题
这是剑指第一次卡死我的题……记录一下 首先看题目: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数 ...
- 剑指offer 丑数
思路:可以发现,每个丑数都是由以前的丑数得到.当前丑数一定是之前丑数能够得到的最小丑数. AC代码 class Solution { public: int GetUglyNumber_Solutio ...
- 用js刷剑指offer(丑数)
题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路 ...
- 剑指offer——丑数(c++)
题目描述只包含质因子2.3和5的数称作丑数(UglyNumber).例如6.8都是丑数,但14不是,因为它包含质因子7,习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路:1.逐个 ...
- 剑指offer--33.丑数
本来用数组做标志位,但是测试数据有第1500个,859963392,惹不起哦 ------------------------------------------------------------- ...
- 剑指Offer-32.丑数(C++/Java)
题目: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 分析: ...
- 剑指Offer32 丑数
/************************************************************************* > File Name: 32_UglyNu ...
- 干货 | 剑指offer系列文章汇总
下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现 剑指offer系列 始 剑指offer—灯管问题(1) 剑指offer—10人电梯(2) ...
- 【剑指offer】丑数
把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. leetcode上也 ...
随机推荐
- HA-web-services
一.HA部署 本次实验的程序选型为heartbeat v1 + hearesources.资源有IP和httpd,filesystem 配置HA集群的前提: (1)各节点资源一致,硬件或软件环境一致 ...
- 安装 python 数据分析插件 pandas
一上午试验了各种方法,发现利用pycharm是最快的.可以抛弃版本,命令和兼容问题的烦恼.纯粹傻瓜式 方法是 pycharm, 直接在settings里面,搜索pandas,添加即可,他会把所有之前需 ...
- spring mvc:练习 @RequestParam(参数绑定到控制器)和@PathVariable(参数绑定到url模板变量)
spring mvc:练习 @RequestParam和@PathVariable @RequestParam: 注解将请求参数绑定到你的控制器方法参数 @PathVariable: 注释将一个方法参 ...
- centos7里没有ifcfg-eth0只有 ifcfg-ens33(没有Eth0网卡)
https://www.cnblogs.com/feixiangtk/p/6819118.html CentOS7系统安装完毕之后,输入ifconfig命令发现没有eth0,不符合我们的习惯.而且也无 ...
- Struts2中的包的作用描述
asm-3.3.jar作用:操作java字节码的类库包路径及主要类:未提供 asm-commons-3.3.jar作用:提供了基于事件的表现形式包路径及主要类:未提供 asm-tree-3.3.jar ...
- Linux中awk后面的RS, ORS, FS, OFS 用法
Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义“行”呢?这就是RS的作用. 默认情况下,RS的 ...
- Ansible 小手册系列 十九(常见指令表)
Play 指令 说明 accelerate 开启加速模式 accelerate_ipv6 是否开启ipv6 accelerate_port 加速模式的端口 always_run any_error ...
- iOS自动化探索(八)Mac上的Jenkins安装
安装Jenkins 首先检查是否有Jenkins依赖的java环境 java -version 出现java version "1.8.xx"说明已经安装了java Jackeys ...
- BZOJ2259 [Oibh]新型计算机
话说hzwer你在坑爹?... 我按照你的建图交了上去,发现WA. 开始检查= =...过了好久,突然觉得画风不对...hzwer您建图错了啊!!! 后来看了看zky的终于知道了怎么回事>_&l ...
- SQL SERVER 算法执行效率
较差的性能 <---没有索引(为每个表执行表扫描) --->非聚集非覆盖索引(seek+局部有序扫描+lookups) ---> 聚集索引(seek+局部扫描) ---> 非聚 ...