微软面试题求解

gegeda2099 2011-08-03 10:59:32
现有10000个随机数,求出第50个大小的数,要求时间复杂度为O(kn)(k为1、2、3、4等整数)
...全文
190 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuchenshabi1 的回复:]

额。。。恕我想的简单了,好像时间复杂度为O(n)的查找只有顺序查找法啊,找50编,近似O(50n),这么简单吗
[/Quote]
有O(kn)的排序算法,当然,对输入值有一定显示。这随机数是不是整数?
ganjianh8 2011-08-03
  • 打赏
  • 举报
回复
n是什么?
问题是不是应该为
现有n个随机数,求出第50个大小的数,要求时间复杂度为O(kn)(k为1、2、3、4等整数)
xuchenshabi1 2011-08-03
  • 打赏
  • 举报
回复
额。。。恕我想的简单了,好像时间复杂度为O(n)的查找只有顺序查找法啊,找50编,近似O(50n),这么简单吗
icansaymyabc 2011-08-03
  • 打赏
  • 举报
回复
先准备一个尺寸为 50 的顺序表(或者堆什么的看你喜欢神马数据结构了),

依次读入随机数,如它小于表中最后一个数则抛弃,否则插入顺序表中正确位置,并抛弃表中最后一个数。

完了返回表中最后一个数作为答案。

算法复杂度 O(kn),k=50*log50
hndcwynui 2011-08-03
  • 打赏
  • 举报
回复
第k大的数-选择算法

可以参考http://s99f.blog.163.com/blog/static/351183652009499403032/

算法导论书 第9章第2节也有这个问题的解答

利用类似快排中划分方法可以在O(n) 找到第k个大小的数
jackyjkchen 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xyh211 的回复:]

7楼的前辈,我怎么看怎么想,好像您的代码的结果都是统计0到255这些数出现的次数
[/Quote]
这就是计数排序的思想,最后从小到大分别输出,不就是排序了么

0~255是举个例子,你也可以0~65535(ushort范围),再大可能就不适合用这种非交换排序了
gegeda2099 2011-08-03
  • 打赏
  • 举报
回复
7楼的前辈,我怎么看怎么想,好像您的代码的结果都是统计0到255这些数出现的次数
chengys520 2011-08-03
  • 打赏
  • 举报
回复
学习了
gegeda2099 2011-08-03
  • 打赏
  • 举报
回复
2楼的前辈能否细说一下您的想法
lazi2008 2011-08-03
  • 打赏
  • 举报
回复
不知道什么是时间的复杂度。。
gegeda2099 2011-08-03
  • 打赏
  • 举报
回复
对了随机数现在假定为整数
gegeda2099 2011-08-03
  • 打赏
  • 举报
回复
这么多牛人!真是学习了
jackyjkchen 2011-08-03
  • 打赏
  • 举报
回复
这一题含简单啊,计数排序或鸽巢排序,这种非交换排序的复杂度就是O(n),比快速排序这样的交换排序快,但需要额外空间,思想上就是1楼那样的,参考代码

这个是针对字节串的,比字节更大范围的,要相应增加缓冲区

void PigeonholeSort(BYTE *array, int length)
{
int b[256] = {0};
int i,k,j = 0;
for(i=0; i<length; i++)
b[array[i]]++;
for(i=0; i<256; i++)
for(k=0; k<b[i]; k++)
array[j++] = i;
}

luciferisnotsatan 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hacqing 的回复:]
lz提的问题值得怀疑呀. 时间复杂度O(kn) k = 1, 2, 3...(与n无关系数)?
这是什么时间复杂度表达式呀, 堪称micro的面试题?
[/Quote]
说不定,很多去面的人看到 O(n),以为遍历一次。结果没办法,只能改kn了。
hacqing 2011-08-03
  • 打赏
  • 举报
回复

lz提的问题值得怀疑呀. 时间复杂度O(kn) k = 1, 2, 3...(与n无关系数)?
这是什么时间复杂度表达式呀, 堪称micro的面试题?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧