解一道经典的腾讯算法面试题(小白也能看懂)

算法,对于一个程序员还是非常重要的,它不单单能体现你的数学思维,还能体现出一种逻辑能力,如果你要进BAT这样的大厂,请一定重视算法,它是你的必经之路。

640?wx_fmt=jpeg

前两天看到的一道腾讯面试题,觉得还是很经典,分享一下自己对于解答这道题的思路,本文不长,但是只要认真去看,跟着我的思路,还是足够教你一种解题思维,如果看完还不会,请留言,我一定教会你。


一. 题目

 
 
有64匹马,一共有8个赛道,想要找出最快的4匹马,要比赛最少多少轮才可以?

看完题目请自己先思考一下怎么解,然后带着你的答案再往下看。


二. 题目分析

  1. 首先没有计时器,不要想象成奥运会的赛跑比赛,一轮比赛解决不了问题。

  2. 这64匹马速度是恒定的,不会因为再跑一轮累了跑的就比其他马慢,否则这题没有办法解了。

  3. 8个赛道的意思是每一轮都能跑8匹马,不会跑乱了。

  4. 如果“马”赛跑的让你思维干扰很大,可以想象为64个速度未知且速度各不相同且速度恒定不变的玩具小汽车,8个跑道是直的,每次8个小汽车比赛。


三. 解题思路

  1. 首先可以把64个小汽车分为8组,分别比赛,在每组中的不能进入前四位的,那说明在64个中肯定不能进入前四位,即每组后四位肯定不是我们想要的答案。

  2. 接下来剩下了32个速度不同的小汽车,如果我们继续使用上面的方法,32组再次拆分,分为4组,挑出来最快的4个,这四个是最快的吗?当然不是,如果4组中,第一组的第2名跑的比第二组的第一名还快呢?

  3. 换个思路,把第一步中的八组里的第1名都放一起比一下,可以挑出后四名,而这后四名分别是他们各自分组下的第1名,此时便可以淘汰掉对应的这四组,剩下了16个小汽车。

  4. 接下来我们将剩下的16个小汽车来做一个表格组合一下。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值