前端面试题——赛马64找8(保姆级分析)

引言:

以前去西安某游戏公司面试前端开发岗位,考了我一道赛马题,当场没想出来,面试也就瓜熟蒂落的凉凉。html

回家以后,我仔细研究了一下,结合网络上的一些思路,梳理出来一个目前我的认为的最优解,但不知道会不会存在更少的状况。前端

本文就结合这道题目,分享一下我我的解此题的一个详细思路,用图文的形式去呈现。面试

题目要求:

现有64匹马,赛场上有8条跑道(一场最多赛8匹)。问,在不用计时器的状况下,最少状况下,赛多少场可以找到最快的4匹。如图:网络

 

 

分析:

根据题意,咱们能够很轻松想到,64匹马可以排成8*8的方阵(一共8组,每组8匹)。spa

恰好每组8匹恰好占满8个跑道,不构成浪费。htm

不管怎样,至少每匹马都得参加比赛,有参考依据,才有可能得出结论。blog

1.第一步:(8场)

如上述分析,将64匹马随机分红8组,每组8匹,让它们跑去吧。游戏

这样咱们至少能够得出每一组的排名,这里为了避免混淆,组统一用ABCDEFGH表示名次用12345678表示开发

如今咱们知道每一组的排名,但不能轻易下结论。极端状况下,A组的8匹有多是最快的8匹,B组的第1也许很快,但比起A组第8,仍然是难以望其项背。get

这样咱们还不能肯定具体名次,咱们可让每一组的第1名加赛一场,得出每组按第一升序排列的矩阵

2.第二步:(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匹马。用红色标记。如图:

 

3.第三步:(1场,最多2场)

还剩下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。(结束)

4.第四步:(总结)

结合上述分析,看C1最后一场若是不跑第3就是最少状况,最少须要10场,(8+1+1)。

这仅仅是目前本人认为最少的场次,若是有更犀利的思路,我会积极采纳!

原创地址:http://www.javashuo.com/article/p-npfoomhp-mv.html

相关文章
相关标签/搜索