读书人

两道算法面试题,该如何处理

发布时间: 2012-03-22 17:43:57 作者: rapoo

两道算法面试题
1、有81个选手,9个赛道,要求选出前4名。需要多少场?

2、有N(很大)个数,从里面选出第K(很小)大的数,要求时间复杂度尽可能的小。

[解决办法]
第一题:11场够了
第二题:用nth-element,是O(n)的
[解决办法]
第二题:随机快排,判断,扔掉一边,对另一边操作,这题算法导论上有,编程这美上有,也有很多网上有,自己查一下就是了,时间复杂度O(n),选用随机算法也要花费一定的代价,可以取第一个,中间一个,最后一个取中位数作为判断依据,具体我也忘了,也可以五五划分一组,再五个划一组,见算法导论。。。
[解决办法]
我的答案是是16
81/9 = 9次
每次取前4名,保证了(如果一次就把最快的4个人包括)的情况
4*9/9 = 4次
再取前四名
4*4/9 = 2次
再取前四名
4*2/9=1次
count = 9+4+2+1 = 16;

11次的?请高手说明白点,让我学习一下

读书人网 >软件架构设计

热点推荐