Design an algorithm to find the kth number such that the only prime factors are 3,5 and 7

方法一:

a[i]=min{a[s1]*3,a[s2]*5,a[s3]*7};

s1<i,s2<i,s3<i   &&    a[s1]*3>a[i-1],a[s2]*3>a[i-1],a[s3]*7>a[i-1]

时间复杂度O(n^2)

#include<stdio.h>

int min(int a,int b,int c)
{
int smallest = a<b?a:b;
smallest = smallest<c?smallest:c;
return smallest;
} int func(int k)
{
int m3=;
int m5=;
int m7=;
int *p = new int[k+];
p[]=;
for(int i=;i<=k;i++)
{
for(int j=;j<i;j++)
{
if(p[j]*>p[i-])
{
m7=p[j]*;
break;
}
}
for(int j=;j<i;j++)
{
if(p[j]*>p[i-])
{
m5=p[j]*;
break;
}
}
for(int j=;j<i;j++)
{
if(p[j]*>p[i-])
{
m3=p[j]*;
break;
}
}
p[i]=min(m3,m5,m7);
}
int r = p[k];
delete[] p;
p = NULL;
return r;
} int main()
{
int k=;
printf("%dth:%d\n",k,func(k));
return ;
}

方法二:

将1填入输出数组的第一位,然后准备三个队列Q3,Q5,Q7,分别压入1*3,1*5,1*7

第i位就是三个队列的队首元素中最小的,然后将该元素从队列取出:

如果是从Q3取出,则将该数分别乘以3,5,7,再将三个数分别插入到Q3,Q5,Q7队尾

如果是从Q5取出,则将该数分别乘以5,7,再将两个数分别插入到Q5,Q7队尾

如果是从Q7取出,则将该数乘以7,再将结果插入到Q7队尾

直到取出第K+1位(1不算)

时间复杂度O(n)

#include<iostream>
#include<deque> using namespace std; int func(int k)
{
deque<int>Q3;
deque<int>Q5;
deque<int>Q7;
int pi=;
Q3.push_back();
Q5.push_back();
Q7.push_back();
for(int i=;i<k+;i++)
{
if(Q3.front()<Q5.front() && Q3.front()<Q7.front())
{
pi=Q3.front();
Q3.pop_front();
Q3.push_back(*pi);
Q5.push_back(*pi);
Q7.push_back(*pi);
}
else if(Q5.front()<Q3.front() && Q5.front()<Q7.front())
{
pi=Q5.front();
Q5.pop_front();
Q5.push_back(*pi);
Q7.push_back(*pi);
}
else if(Q7.front()<Q3.front() && Q7.front()<Q5.front())
{
pi=Q7.front();
Q7.pop_front();
Q7.push_back(*pi);
}
else
{
cout<<"error"<<endl;
}
}
return pi;
} int main()
{
for(int k=;k<;k++)
{
cout<<k<<"th:"<<func(k)<<endl;
}
return ;
}

Cracking the Coding Interview 10.7的更多相关文章

  1. Cracking the Coding Interview(Trees and Graphs)

    Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...

  2. Cracking the Coding Interview(Stacks and Queues)

    Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...

  3. 《Cracking the Coding Interview》读书笔记

    <Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...

  4. Cracking the coding interview

    写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...

  5. Cracking the coding interview 第一章问题及解答

    Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...

  6. Cracking the coding interview目录及资料收集

    前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...

  7. 《Cracking the Coding Interview》——第18章:难题——题目10

    2014-04-29 04:22 题目:给定一堆长度都相等的单词,和起点.终点两个单词,请从这堆单词中寻找一条变换路径,把起点词变成终点词,要求每次变换只能改一个字母. 解法:Leetcode中有Wo ...

  8. 《Cracking the Coding Interview》——第17章:普通题——题目10

    2014-04-28 23:54 题目:XML文件的冗余度很大,主要在于尖括号里的字段名.按照书上给定的方式进行压缩. 解法:这题我居然忘做了,只写了一句话的注解.用python能够相对方便地实现,因 ...

  9. 《Cracking the Coding Interview》——第13章:C和C++——题目10

    2014-04-25 20:47 题目:分配一个二维数组,尽量减少malloc和free的使用次数,要求能用a[i][j]的方式访问数据. 解法:有篇文章讲了六种new delete二维数组的方式,其 ...

随机推荐

  1. VS2015编译ffmpeg的问题解决

    刚装了vs2015,打开一些ffmpeg项目,发现不能编译通过,包括stdio.h都无法找到,可能是vs2015的bug吧. 现在记录一下解决方法: 我的目录是这样定义的: C:\Program Fi ...

  2. 关于img的一个小知识点

    这两天在撸代码的时候发现图片的最下面总是会留一条空白,刚开始不知道为什么,但是UI拿刀对我说去掉它,瑟瑟发抖的我找了下原因及解决方案. 原因:img 是一个inline-block标签,而这个标签的v ...

  3. MySQL多表连接操作

    select * from userinfo ,dapartment where userinfo.part_id = dapartment.id; --左连接: 左边全部显示 select * fr ...

  4. 面向对象:classmethod、staticmethod、property

    一.classmethod(类方法).staticmethod(静态方法) 方法包括:普通方法.类方法和静态方法,三种方法在内存中都归属于类,区别在于调用方式不同. # 普通方法 由对象调用,至少一个 ...

  5. python之cookbook-day04

    第一章:数据结构和算法 1.4 查找最大或最小的N个元素 问题: 怎样从一个集合中获得最大或者最小的 N 个元素列表? 解决方案: heapq 模块有两个函数:nlargest() 和 nsmalle ...

  6. 手机浏览PC版页面出现背景图片显示不全的问题解决方案

    手机浏览PC版页面出现背景图片显示不全 给定宽高的值

  7. 【codeforces 761E】Dasha and Puzzle

    [题目链接]:http://codeforces.com/contest/761/problem/E [题意] 给你一棵树,让你在平面上选定n个坐标; 使得这棵树的连接关系以二维坐标的形式展现出来; ...

  8. noip模拟赛 c

    分析:一道比较难的爆搜题.首先要把9个块的信息存下来,记录每个块上下左右位置的颜色,然后记录每一排每一列能否操作,之后就是bfs了.在bfs的时候用一个数记录状态,第i位表示原来的第i个块现在在哪个位 ...

  9. 给sunpinyin加速

    因为sunpinyin词库一大就会卡,因此需要自己添加一个脚本给sunpinyin加速. 加速的原理就是把词库添加到内存,现在内存都这么大,根本不在乎这么几兆,当然输入体验更重要啦- 首先先建一个脚本 ...

  10. Java和JS MD5加密-附盐值加密demo

    JAVA和JS的MD5加密 经过测试:字母和数据好使,中文不好使. 源码如下: ** * 类MD5Util.java的实现描述: * */public class MD5Util { // 获得MD5 ...