两道算法面试题

来源:互联网 发布:c语言n!=0是什么意思 编辑:程序博客网 时间:2024/05/16 17:30

http://topic.csdn.net/u/20120313/10/8feef8d4-6cd6-41a4-8955-a1bf7f9734b8.html

1、有81个选手,9个赛道,要求选出前4名。需要多少场?

分9组先跑9场小组赛,再用9个第1跑1场决赛,共10场,此时可以确定的只有第1名。
那么2至4名有可能是谁呢?

特殊情况下,有可能1-4名都被分到了同一组,并且在小组赛里,2-4已经被淘汰了,因此需要把他们找回来。找到小组赛中输给冠军的2-4名,共3匹马。同理找到小组赛输给第2的2、3名,2匹马。输给第3的第2名,1匹马。如果2-4名是在小组赛中被淘汰了,那么只可能在这6匹马中。用这6匹马+决赛的2-4名,共9匹马,再跑一场,就可以找到真正的2-4名了。

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

第二题挺简单的,就和选出n个数最小的一个一样。循环打擂。先在前k个数选出第k个数,记下它位置记为Item。然后依次走下去。碰到比大的的跳过。碰到比它小的,更改Item所指位置。

时间复杂度为O(n).