编程题:“丑数”

今天看剑指offer的时候碰到了“丑数”这个问题,说这个“丑数”,常规的情况是,一般人碰到这个问题会感觉到无从下手,为什么呢?因为从一般人的角度来看,比如2乘以2.3.5分别为4、6、10,3乘以2.3.5的话为6、9、15,两个结果中有交叉的部分 ,接下来就想建立一个存储结构,将生成的这些丑数都保存进来,于是想,会不会有一种数据结构能够支持查找数据结构中的元素呢,在O(1)的复杂度里找到这个元素是否存在于这个数据结构里,换句话来说,我想用哈希的思想,但是又碍于空间的消耗 想走一个捷径。。于是。。百思不得其解 看了书上给的解法收到了启发,思路很简单,我们换种丑数的计算方式,不是靠“插入”这种操作,而是根据之前的数组里的东西,“生成”丑数,丑数的生成因子只有2、3和5,那么我们可以保存三个index,下标分别为2、3、5,在已生成的丑数中寻找下标,寻找这个下标对应的丑数乘以各自的生成因子后第一个大于已有丑数中的最大值,分别保存这三个下标,并从生成的三个数中找到最小的,添加到丑数的末尾,以此循环生成丑数。

 

根据此思想写出的代码如下:

#include<iostream>
#include<vector>

int min(int x,int y)
{
    int min;
    x > y ? min = y : min = x;
    return min;
}
void generate_ugly(int *ugly,int length,int &T2,int &T3,int &T5)
{
    int max = ugly[length-1];
    int i;
    for(i=T2;i<length;i++)
    {
        if(ugly[i]*2 > ugly[length-1])
        {
            T2 = i;
            break;
        }
    }
    for(i=T3;i<length;i++)
    {
        if(ugly[i]*3 > ugly[length-1])
        {
            T3 = i;
            break;
        }
    }
    for(i=T5;i<length;i++)
    {
        if(ugly[i]*5 > ugly[length-1])
        {
            T5 = i;
            break;
        }
    }
    ugly[length] = min(min(ugly[T2]*2,ugly[T3]*3),ugly[T5]*5);
}

using namespace std;

int main()
{
    int ugly[1500]={1,2,3,4,5};
    int i,length=5,T2,T3,T5;
    for(i=0;i<length;i++)
    {
        if(ugly[i]*2 > ugly[length-1])
        {
            T2 = i;
            break;
        }
    }
    for(i=0;i<length;i++)
    {
        if(ugly[i]*3 > ugly[length-1])
        {
            T3 = i;
            break;
        }
    }
    for(i=0;i<length;i++)
    {
        if(ugly[i]*5 > ugly[length-1])
        {
            T5 = i;
            break;
        }
    }
    for(i=0;i<1495;i++)
    {
        generate_ugly(ugly,length,T2,T3,T5);
        length++;
    }
    cout << ugly[1499] << endl;
    system("pause");
    
    return 0;

看到结果的时候担心了一下,说这int类型会不会溢出? 于是lz很小白的去网上查找了int类型的表示范围,和编译器的位数有关。比如说32位的编译器,int类型的表示范围为2^32 -1 ~ - 2^32 。

转载于:https://www.cnblogs.com/xiawen/archive/2013/04/15/3022095.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qtreewidget点击空白处时取消以选项_VUE+elementUI 点击页面空白处弹窗不隐藏

点击空白处不隐藏弹窗&#xff0c;点击弹窗里的‘x’和取消按钮关闭弹窗。os&#xff1a;人家都是让点击空白处隐藏弹窗&#xff0c;为啥我们的需求有点另类&#xff1f;&#xff01;木有办法~大佬有需求&#xff0c;小小程序员只能领命。。。话说&#xff0c;element的el-dial…

漂浮的表单

代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Typ…

计算机word文档无法工作,电脑docx打不开怎么办(word文档无法打开的解决方法)...

我们在日常工作的时候&#xff0c;经常都会遇到这样子的一个问题&#xff0c;那也就是Word文件无法的现象。当我们的工作时间又非常的紧迫&#xff0c;那么个时候该怎么办呢&#xff1f;稳住&#xff0c;别慌&#xff0c;今天小编就来和大家一起探讨一下Word无法打开的解决方法…

LinkedList剖析

第1部分 LinkedList介绍 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and per…

3013-04-13 腾讯笔试

题目及答案参考&#xff1a;地址 为什么腾讯笔试的时间是10:30到12:30?难道腾讯人事部认为计算机的学生都是3点睡觉&#xff0c;9点起床&#xff0c;13点吃饭的吗&#xff1f;做了半个小时的题&#xff0c;就饿了&#xff1b;而且刚开始发卷子的时候&#xff0c;那卷子的模样&…

jquery调用asp.net 页面后台方法

先创建一个aspx页面编写一个客户端控件<input type"button" id"AjaxDemo" value"AjaxDemo"> 再aspx后台的页面编写一个简单的方法,代码如下: [WebMethod]public static string ABC(string ABC){ return ABC;} 必须声明为静态方法&#…

powerdesigner怎么导出pdf_各种科研绘图软件中的矢量图导出技巧

引言科技论文常含有插图&#xff0c;借助插图来形象直观、简明扼要地表达所要表述的内容(梁福军. 科技论文规范写作与编辑[M]. 清华大学出版社, 2014.)。科研绘图软件有很多种&#xff0c;而软件导出的图片可以分为矢量图&#xff08;vector&#xff09;和位图&#xff08;bitm…

江西计算机一级考试教程,江西省2019年下半年计算机一级考试复习教程:计算机基础及MS Office应用上机指导...

&nbsp&nbsp[导读]:江西省2019年下半年计算机一级考试复习教程&#xff1a;计算机基础及MS Office应用上机指导&#xff0c;更多江西等级考试用书&#xff0c;请访问易考吧江西等级考试栏目江西省2019年下半年计算机一级考试复习教程&#xff1a;计算机基础及MS Office应…

Typesafe公司正式更名为Lightbend公司

Scala编程语言的发明者&#xff1a;Typesafe公司&#xff0c;已经完成他们的更名计划&#xff0c;改名后成为Lightbend公司。Typesafe公司在去年五月就宣布了他们的更名计划&#xff0c;从那时起&#xff0c;他们希望可以在两个月内完成改名相关事宜。Typesafe公司邀请了社区的…

理解Javascript_12_执行模型浅析

大家有没有想过&#xff0c;一段javascript脚本从载入浏览器到显示执行都经过了哪些流程&#xff0c;其执行次序又是如何。本篇博文将引出javascript执行模型的概念&#xff0c;并带领大家理解javascript在执行时的处理机制。 简单的开始 简单的代码&#xff1a; <script ty…

怎么制作铁闸门_“短笛”拿铁,最近的心头好!

其实花式咖啡除了市面上一些常见的款式外&#xff0c;还有一些是不常见又好喝的&#xff01;今天来给大家推荐一款“短笛”拿铁&#xff0c;最近的最爱&#xff01;什么是短笛拿铁&#xff1f;piccolo latte&#xff0c;在意大利文中“piccolo”是小的意思&#xff0c;而latte则…

计算机发展趋势是规格化,2016年春季计算机应用基础月考卷(4月).doc

2016年春季学期计算机应用基础4月考卷姓名&#xff1a; 得分&#xff1a;一、单项选择题。(共有75个小题&#xff0c;每小题2分&#xff0c;共计150分)1. 计算机的发展通常认为经历了四代&#xff0c;第二代计算机的主要元器件是( )A. 电子管 B&#xff0e;晶体管 C&#xff0e…

C#与.NET程序员面试宝典 1.3 投递简历

在IT行业中&#xff0c;应聘是大多数人获得工作机会的主要途径&#xff0c;通常人们从学校毕业后即开始参加各种形式的招聘场合。从招聘方的角度来说&#xff0c;不同的公司有不同的招聘渠道&#xff0c;但大多数都会重点采用网络、校园、招聘会3个渠道进行招聘员工。想要应聘到…

回归初心

软件工程这门课程已经上了两周了&#xff0c;可以说这两周过得非常的充实&#xff0c;除了上课时间&#xff0c;其余的课余时间都用来写作业和看书了。我想&#xff0c;这才是刚进入大学时&#xff0c;我憧憬的生活。现在看来&#xff0c;过去的三年确实会感到有点遗憾&#xf…

scipy是python下的什么_Python下科学计算包numpy和SciPy的安装

Python下大多数工具包的安装都很简单&#xff0c;只需要执行 “python setup.py install”命令即可。然而&#xff0c;由于SciPy和numpy这两个科学计算包的依赖关系较多&#xff0c;安装过程较为复杂。网上教程较为混乱&#xff0c;而且照着做基本都不能用。在仔细研读各个包里…

计算机指令格式哪几部分组成,计算机的指令格式,通常是由()两部分组成。 - 百科题库网...

1.8086汇编语言指令由标号、操作码、操作数和注释组成,其中标号和注释可以省略&#xff0c;操作码指出指令要过盛的功能,操作数指出完成的对象. 2.变量和标号的区别是变量由伪指令定义&#xff0c;标号是指令前面的符号&#xff0c;变量也伪指令定义符之间由空格分隔&#xff0…

执行phpinfo();时提示:date_default_timezone_set()

执行phpinfo();时提示&#xff1a; Warning: phpinfo() [function.phpinfo]: It is not safe to rely on the systems timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those …

nlog轻量级日志组件

一.NLog简要介绍: 1.NLog是一个简单灵活的.NET日志记录类库。通过使用NLog&#xff0c;我们可以在任何一种.NET语言中输出带有上下文的&#xff08;contextual information&#xff09;调试诊断信息&#xff0c;根据喜好配置其表现样式之…

SQL Server 2016 RC0 安装(超多图)

微软最新版本的数据库SQL Server 2016在2016年3月9日推出了RC0版本。已经提供了包括简体中文等多种语言版本&#xff0c;不过联机丛书还是英文版的。对OS的要求是WIN8&#xff0c;WIN10&#xff0c; WIN2012&#xff0c;只有64位版本。让我们下载最新的版本安装测试下。Figure-…

vfp赋值超过7位出错_JDK1.7下的HashMap的源码分析

源码分析jdk1.7下的HashMap我们都知道1.7版本的hashmap的底层是数组加链表构成的&#xff0c;那么今天我们就来自己分析一波源码~篇幅有点长&#xff0c;废话不多说&#xff0c;直接开始分析~「属性声明」//初始化容量 static final int DEFAULT_INITIAL_CAPACITY 1 <4;…