日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

腾讯二面,我被 “赛马” 问题难住了

發(fā)布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯二面,我被 “赛马” 问题难住了 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

很難一次答對的經(jīng)典面試題,處處是坑

大家好,我是魚皮。

今天分享一道我曾經(jīng)被難住了的面試題,也是一道大廠面試時經(jīng)常會被問到的面試題,賽馬問題。

題目其實(shí)不難,但是第一次被問到時,稍有不慎,就會答錯。所以,一起來學(xué)習(xí)下吧!

問題

64 匹馬 賽跑,沒有任何秒表之類的計時工具,跑道每次只允許 8 匹馬 同時比,問 最少 需要比賽幾場才能夠選出跑的最快的 前 4 名

題目描述就這么多,大家可以先思考一下,然后在投票中給出答案吧~

(投票)

下面公布解題思路和答案。

解題思路

這道題目坑點(diǎn)很多,題目中任何一個數(shù)字的改動都會影響到最終結(jié)果,因此一定要明確題目上的關(guān)鍵數(shù)字。

網(wǎng)上也有很多題目的變種,比如 36 匹馬 6 個跑道找前三名,但思路都是一致的,下面我們模擬一下比賽全程。

第一輪

首先,跑道最多允許 8 匹馬同時比,那我們一定要最大程度地利用資源,每場比賽都要上滿 8 匹馬。

所以第一輪最簡單,無腦 將 64 匹馬分為 8 組,每組 8 匹馬比一場 就好了,共計 8 場比賽。

組號參賽選手
組 1🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴
組 2🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴
組 3🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴
組 4🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴
組 5🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴
組 6🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴
組 7🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴
組 8🐴 🐴 🐴 🐴 🐴 🐴 🐴 🐴

本輪比賽之后,由于題目要求選出前 4 名,因此,每組比賽第 4 名之后的馬可以直接淘汰,還剩 32 匹馬。

組號參賽選手(🐎 = 組內(nèi)冠軍)
組 1🐎 🐴 🐴 🐴
組 2🐎 🐴 🐴 🐴
組 3🐎 🐴 🐴 🐴
組 4🐎 🐴 🐴 🐴
組 5🐎 🐴 🐴 🐴
組 6🐎 🐴 🐴 🐴
組 7🐎 🐴 🐴 🐴
組 8🐎 🐴 🐴 🐴

?

第二輪

第二輪開始,我們必須精打細(xì)算了。

最簡單的方式是將剩下的 32 匹馬直接分為 4 組去比賽,但其實(shí)利用上一輪的信息,我們可以有更好的方法。

讓上輪比賽中,每組第 1 名一起比賽 1 場,然后按照本輪比賽結(jié)果,選出前 4 組。

賽場:🐎 🐎 🐎 🐎 🐎 🐎 🐎 🐎

比賽結(jié)果:

組號參賽選手(🐎 = 組內(nèi)冠軍)
組 1🐎 🐴 🐴 🐴
組 2🐎 🐴 🐴 🐴
組 3🐎 🐴 🐴 🐴
組 4🐎 🐴 🐴 🐴
組 5🐎 🐴 🐴 🐴

這么操作的原因是:如果某個組的第一名都進(jìn)不了前 4,那這個組剩下的馬肯定也進(jìn)不了前 4,直接整組淘汰即可。

截止到目前,還剩下 16 匹馬,那這一輪淘汰到這里就結(jié)束了么?

其實(shí)并沒有,以這輪比賽排名第四的馬所在的組為例,這個組的冠軍最高也才第四名,那么這個組其他的馬也是可以被淘汰的。同理,可以淘汰更多的馬,剩余 10 匹。

組號參賽選手(🐎 = 組內(nèi)冠軍)
組 1🐎 🐴 🐴 🐴
組 2🐎 🐴 🐴 🐴
組 3🐎 🐴 🐴 🐴
組 4🐎 🐴 🐴 🐴

現(xiàn)在場上還有 10 匹馬,看似勝利近在咫尺,但其實(shí),接下來才是關(guān)鍵!

第三輪

接下來我們的目標(biāo)是從 10 匹馬中選出前 4 名,但一場比賽只能容納 8 匹馬,那好像至少還得比兩場。

一步步來吧,先選 8 匹馬比一場唄,問題是選哪 8 匹馬呢?

不知道大家有沒有發(fā)現(xiàn),在無意中,冠軍已經(jīng)產(chǎn)生了,那就是組內(nèi)組外都未嘗敗績的那匹馬,強(qiáng)中之強(qiáng)!

組號參賽選手(🐎 = 組內(nèi)冠軍)
組 1🏆 🐴 🐴 🐴
組 2🐎 🐴 🐴
組 3🐎 🐴
組 4🐎

因此,它不用再比了,目標(biāo)變成,從剩余 9 匹馬中選出第 2 - 4 名。

讓我們?nèi)我膺x 8 匹馬先比一場吧,選出前 3 名。

組號參賽選手(🐎 = 組內(nèi)冠軍)
組 1🏆 [ 🐴 🐴 🐴 ] 出戰(zhàn)
組 2[ 🐎 🐴 🐴 ] 出戰(zhàn)
組 3[ 🐎 🐴 ] 出戰(zhàn)
組 4🦓(未參與比賽的馬)

那么最后一輪,還需要讓上輪沒比的馬與前 3 名比 1 場,萬一人家是黑馬呢?

賽場:🐎 🐴 🐴 🦓

至此,答案出來了,最少需要 8 + 1 + 1 + 1 = 11 場。

然而,這是一個錯誤答案!

其實(shí),還有更優(yōu)解!

在還剩 9 匹馬的時候,如果不任選 8 匹馬比賽,而是先移除組 2 的冠軍,讓剩下 8 匹馬賽一場。

如果這場比賽中,組 3 的冠軍拿了第一,那么由于之前已經(jīng)證明了組 2 的冠軍強(qiáng)于組 3 的冠軍,則前 4 名已經(jīng)確定,只需要比 10 場。如果它不是第一,那么還是要多比一場了。

因此正確答案是,最少需要 10 場,你做對了么?


最后,為什么這道題目會出現(xiàn)在程序員面試中呢?聰明的你一定發(fā)現(xiàn)了,上述的賽馬問題本質(zhì)上是一個 TopN(取前幾名)問題,可以通過分治的方式解決,是一種經(jīng)典的算法思維。如果是在分布式系統(tǒng)中,則體現(xiàn)了 并行計算 的優(yōu)勢,可以利用資源(比如有 8 個跑道)對各個組同時計算,從而提高運(yùn)算效率。此外,利用已有的數(shù)據(jù)結(jié)果也是非常重要的。

祝大家周末愉快,學(xué)到的話別忘了幫魚皮點(diǎn)個 支持下吧!??

總結(jié)

以上是生活随笔為你收集整理的腾讯二面,我被 “赛马” 问题难住了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。