(最优解)阿里笔试题请设计一个算法,在满足质因数仅为3,5,7或其组合的数中,找出第K大的数。比如K=1,2,3时,分别应返回3,5,7。要求算法时间复杂度最优。
来源:互联网 发布:大数据采集平台 编辑:程序博客网 时间:2024/05/21 06:34
//2015年4月1日
先贴出网上流传的解答:(非最优的)
我们可以用3个队列来维护这些数。第1个队列负责乘以3,第2个队列负责乘以5, 第3个队列负责乘以7。算法描述如下:
1. 初始化结果res=1和队列q3,q5,q7
2. 分别往q3,q5,q7插入1*3,1*5,1*7
3. 求出三个队列的队头元素中最小的那个x,更新结果res=x
4. 如果x在:
q3中,那么从q3中移除x,并向q3,q5,q7插入3*x,5*x,7*x
q5中,那么从q5中移除x,并向q5,q7插入5*x,7*x
q7中,那么从q7中移除x,并向q7插入7*x
5. 重复步骤3-5,直到找到第k个满足条件的数
注意,当x出现在q5中,我们没往q3中插入3*x,那是因为这个数在q5中已经插入过了。
其实当我们第一次看到这个题,都会想到K是不是一个可以求解的数。
但马上困难就出现了,我们不知道如何为3^x,5^y,7^z排序。
对数学较敏锐的人会马上想出方法:
5^y=3^(log3(5)*y)
7^z=3^(log3(7)*z)
这样一来:
a(n)=3^x*5^y*7^z=3^(x+log3(5)*y+log3(7)*z)
就只需要对x+log3(5)*y+log3(7)*z的第K大的数进行求解。
因为这里x,y,z之间是固定比例,很容易做。
1 0
- (最优解)阿里笔试题请设计一个算法,在满足质因数仅为3,5,7或其组合的数中,找出第K大的数。比如K=1,2,3时,分别应返回3,5,7。要求算法时间复杂度最优。
- 阿里笔试题请设计一个算法,在满足质因数仅为3,5,7或其组合的数中,找出第K大的数。比如K=1,2,3时,分别应返回3,5,7。要求算法时间复杂度最优。
- 计算第K个能表示(2^i * 3^j * 5^k)的正整数(i,j,k为整数)?其前7个满足此条件的数分别是1,2,3,4,5,6,8
- 有些数的素因子只有3,5,7.请设计一个算法,找出其中第k个数
- 程序员面试金典: 9.7数学与概率 7.7有些数的素因子只有3,5,7,请设计一个算法,找出其中第k个数
- 设计算法,找到质因数只有3,5或7的第k个数。
- 找出大数组array中第k大的元素(要求时间复杂度O(1))
- 算法题(一)--找出数组中第k大的数并输出其下标(数组中的数有重复)
- 给定 x, k ,求满足 x + y = x | y 的第 k 小的正整数 y 。 | 是二进制的或(or)运算,例如 3 | 5 = 7。比如当 x=5,k=1时返回 2,因为5+1=6 不等于 5
- 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
- 从俩个有序数组中找出第K小的数。要求时间复杂度O(logmin(m,n))
- n个无序整数,已知第i个数在排好序的序列中的位置为j,满足|i-j|<=K,请设计一种排序算法,对该序列进行排序。注:算法时间复杂度为O(nlgn)的得0分,复杂度为O(nk) 的得两分,总分是20分
- 寻找数组中第k小的数:平均情况下时间复杂度为O(n)的快速选择算法
- 【数据结构与算法分析】1.1 找出N个数字中第K大的数
- 算法--选择第K大的数
- 【算法】求第k大的数
- 在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是----阿里巴巴2015实习生笔试题
- 【每天学点算法题10.18】找出数组中的第K大的数
- codeforces 55D Beautiful numbers
- day013 NSString NSArray NSDictionary
- 角点检测Harris角点检测
- 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?
- spring aop实现权限控制,路径控制
- (最优解)阿里笔试题请设计一个算法,在满足质因数仅为3,5,7或其组合的数中,找出第K大的数。比如K=1,2,3时,分别应返回3,5,7。要求算法时间复杂度最优。
- 容易忽略的Java知识点(整理ing)
- 定时器NSTimer
- 驱动程序的高级机制使用初步
- gethostbyname() 及 getaddrinfo() 用法探究
- poj 3468
- ClassLoader总结
- 李白打酒-DFS
- zookeeper使用和原理探究(一)