【前端词典】有趣的大厂算法面试题

本文探讨了一个有趣的算法问题:如何在64匹马中,通过最少的比赛次数找出前4名。文章详细解析了比赛流程,最终得出结论,在8个赛道上,找出前4名至少需要进行10场比赛。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=png

前言

看到一篇算法文章,觉得着实有趣,但不知为何我看到题后首先想到的是田忌赛马。今天我也试着解释下这题,当做是一个学习的过程。

解题过程

题目:64 匹马,8 个赛道,找出前 4 名最少比多少场?(马的速度恒定不变)

直接开始

第一轮

64 匹马分 8 次在全部比完一次,然后我们可以把目标缩小到 32 匹马。

第一轮解析

1、八次比完后,我们可以将每一匹马的速度按下表排好。

640?wx_fmt=jpeg

2、每组比赛的后 4 名直接淘汰(小组中都无法进前四,全部中必然无法进前四);

640?wx_fmt=jpeg

到现在为止,已经进行了 8 次比赛

第二轮

剩下的 8 组 32 匹马选每组的第一名进行一次比赛,然后我们可以把目标缩小到 10 匹马。

第二轮解析

1、8组中第一名比完后(假设 A1 表示最快的,依次为较慢者,H1最慢),这次比赛直接影响到它们这组是否可以参加下一场的比赛,因为每组的第一都进不了前四的话那这组肯定就没有前四的马啦。

2、所以这轮比赛的后四名直接全组淘汰,剩下 16 匹马。

640?wx_fmt=jpeg

3、先别急着进行下一场的比赛,因为这里面还可以淘汰 6 匹马。

D 组第一名 D1 都最多只是第四名,所以 D2、D3、D4 就不需要再比了;C 组第一名 C1 最好成绩是第三名,所以只有 C2 可以冲一下第四名,C3、C4 淘汰;B 组第一名 B1 最好成绩是第二名,所以 B2、B3 还是有机会进前 4 的,B4 淘汰;A 组就运气比较好,全组都可能进前 4 。

即剩 A1、A2、A3、A4、B1、B2、B3、C1、C2、D1 十匹马可能进前四。

到现在为止,已经进行了 9 次比赛

第三轮

A1 必定是第一名无需再比。B1 这个暂定第二的基本不需要再比,所以剩下的 A2、A3、A4、B2、B3、C1、C2、D1 这八匹马再比一次。

第三轮解析(情况有二)

1、这轮比赛如果 B2 或 C1 中二者有其一进入前三,那比赛结束,前四名已经区分出来。(这点想不明白的话你想想这个问题:跑步比赛中你跑过了第二名你是第几名)

我们知道 B1 在 BCD 三组中肯定是最快的,所以 B2 或 C1 进入前三,B1 就一定再前四。

若结果为:A2>B2>C1>C2>D1>A3>A4>B3

那么前四就是 A1、A2、B1、B2(A2、B1 的名次不知)

2、如果比赛的前三戏剧性的是 A2、A3、A4,那么我们是不清楚 A4 快还是 B1 快的,所以需要在比一场,就能找出前四。

情况一:8 + 1 + 1 = 10, 共 10 次
情况二:8 + 1 + 1 + 1 = 11,共 11 次

总结

64 匹马,8 个赛道,找出前 4 名最少需要比 10 场。

关于奇舞周刊

《奇舞周刊》是360公司专业前端团队「奇舞团」运营的前端技术社区。关注公众号后,直接发送链接到后台即可给我们投稿。

640?wx_fmt=png


资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值