以前去西安某游戏公司面试前端开发岗位,考了我一道赛马题,当场没想出来,面试也就瓜熟蒂落的凉凉。html
回家以后,我仔细研究了一下,结合网络上的一些思路,梳理出来一个目前我的认为的最优解,但不知道会不会存在更少的状况。前端
本文就结合这道题目,分享一下我我的解此题的一个详细思路,用图文的形式去呈现。面试
现有64匹马,赛场上有8条跑道(一场最多赛8匹)。问,在不用计时器的状况下,最少状况下,赛多少场可以找到最快的4匹。如图:网络
根据题意,咱们能够很轻松想到,64匹马可以排成8*8的方阵(一共8组,每组8匹)。spa
恰好每组8匹恰好占满8个跑道,不构成浪费。htm
不管怎样,至少每匹马都得参加比赛,有参考依据,才有可能得出结论。blog
如上述分析,将64匹马随机分红8组,每组8匹,让它们跑去吧。游戏
这样咱们至少能够得出每一组的排名,这里为了避免混淆,组统一用ABCDEFGH表示,名次用12345678表示。开发
如今咱们知道每一组的排名,但不能轻易下结论。极端状况下,A组的8匹有多是最快的8匹,B组的第1也许很快,但比起A组第8,仍然是难以望其项背。get
这样咱们还不能肯定具体名次,咱们可让每一组的第1名加赛一场,得出每组按第一升序排列的矩阵。
如上述,每组第1加赛一场。咱们能够按名次排列出一个8*8的矩阵。
以下表所示,A为第1名所在组,B为第2名所在组,以此类推。
这样下来,A1必定是64匹中的大哥,最快的那匹,咱们用土豪金标注。(由于是每组第1中的第1)
并且,E1做为每组第1中的第5,已经不可能在总体前4了,由于A1,B1,C1,D1都比它快,因此EFGH组所有淘汰。(用白色标注)
对于D1而言,是每组第1中的第4,是可能入围的,并且最好名次也是第4,那么D2~D8做为D1的小弟确定没戏了。
同理,对C1而言,最好名次也是第3,C2做为C1小弟能够勉强争一下第4,因此C3~C8淘汰。
那么B4~B8以及A5~A8所有淘汰,如今场上只剩下了A1~A4,B1~B3,C1~C2,D1。总共10匹马。用红色标记。如图:
还剩下10匹马,但咱们已知A1必定是全场最佳,因此剩下9匹马须要再比一场。
如今只有8个赛道,却有9匹马,看样子是须要让其中一匹马在场下看热闹了。
而这匹马最好选择“边缘人”,也就是在淘汰边缘的,相比较而言D1的位置最为尴尬,ABC组里边的非第1,随时有可能挤掉它成功上位。
因此,选择D1看热闹是最合适不过的了。(由于D1最多拿第4,不然淘汰)
接下来,咱们就让A2,A3,A4,B1,B2,B3,C1,C2去跑。
跑完以后,这样咱们能够参照C1的名次来判断接下来须要怎么赛。
若C1是本组第4~7名,则总体2~4名和本组前3一一对应,加上A1的第1名,构成前4。(结束)
若C1是本组第3名,则让C2和D1加赛一场,抢第4名。(加赛一场,结束)
若C1是本组第2名,则前4就是A1,C1,C2及D1,C2和D1没必要进行季军争夺,怎么争夺都是一个第3一个第4。(结束)
结合上述分析,看C1最后一场若是不跑第3就是最少状况,最少须要10场,(8+1+1)。
这仅仅是目前本人认为最少的场次,若是有更犀利的思路,我会积极采纳!