美文网首页
前端一道面试题-赛马64找8(爸妈级讲解)

前端一道面试题-赛马64找8(爸妈级讲解)

作者: WEB前端含光 | 来源:发表于2020-08-28 16:47 被阅读0次

引言:
之前去西安某游戏公司面试前端开发岗位,考了我一道赛马题,当场没想出来,面试也就顺理成章的凉凉。

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

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

题目要求:
现有64匹马,赛场上有8条跑道(一场最多赛8匹)。问,在不用计时器的情况下,最少情况下,赛多少场能够找到最快的4匹。如图:


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

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

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

1.第一步:(8场)
如上述分析,将64匹马随机分成8组,每组8匹,让它们跑去吧。

这样我们至少可以得出每一组的排名,这里为了不混淆, 组统一用ABCDEFGH表示 , 名次用12345678表示

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

这样我们还不能确定具体名次,我们可以让每一组的第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淘汰。

那么B4B8以及A5A8全部淘汰,现在场上只剩下了A1A4,B1B3,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是本组第47名,则整体24名和本组前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)。

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

如果你现在也想学习前端开发技术,在学习前端的过程当中有遇见任何关于学习方法,学习路线,学习效率等方面的问题,你都可以加入到我的Q群中:前114中6649后671,里面有许多前端学习资料以及2020大厂面试真题 点赞、评论、转发 即可免费获取,希望能够对你们有所帮助。


相关文章

网友评论

      本文标题:前端一道面试题-赛马64找8(爸妈级讲解)

      本文链接:https://www.haomeiwen.com/subject/ztwlsktx.html