騰訊算法面試題:64匹馬8個跑道需要多少輪才能選出最快的四匹?

這裏記錄了兩種解題的思路
第一步:64匹馬分別進行比賽,不在前4的馬 淘汰掉。此時剩餘 8組,每組4個  共32匹馬       (8場)
第二步:8組裏的第一名賽一場,不在前四的馬連同所在的組 淘汰掉,此時剩餘 4組,每組4個  共16匹馬   (1場)
前面兩步是一樣的,畫風突變在後面
其中一種解法(有概率在裏面
第三步:將第二步裏排名1,2的兩匹馬所在的組進行比賽,這裏有兩種情況可以完成查找(1場)  此時總共是10場比賽
(1)這裏如果第二步排名第二的馬(暫且稱它"勒馬")此次排名>=4,那麼排名前4的就是最快的4匹                           馬了 
(2)如果"勒馬" 排在第三位那麼第四名肯定就是第二步裏的第三名了  
第四步:如果"勒馬" 排在第二名這就說明 第3,4名 可能是第二步的第三名的組裏,最壞的情況下還需要2場比賽才能選出來   所以最終比賽場數 10場-12場
 
------------------------------------------------分割線-------------------------------------------------------
 
另一種解法(很穩的一種
因爲第二步的原因,我們肯定能找出來一匹一直跑第一的馬(暫且稱"神馬"),那麼就能確定最快的馬裏第一的位置一定是"神馬"了,那接下來 我們只要找第2-4快馬就可以
第三步:排除"神馬"還剩15匹馬,再取第一名組的剩餘三匹馬,第二名組的前三,第三名組的前二,第四名組的前一,其他全部淘汰,還剩9匹馬,選八匹馬出來再比一場可以得出前三名
 
(詳解:因爲第一名已經有了,第一組的剩餘三匹馬有可能是剩下三名,第二組前三也有可能,第三組的前二加上第二組的第一名也有可能,
第四組的第一加上第三組的第一加上第二組的第一也有可能是剩餘的三名最快的馬,這裏看不懂的無法理解的可以多想想)
 
第四步:(1場)
最後拿前三名和剩餘一個沒有比的在比一場,取前三,加上第一名,就是最快的四匹馬,所以最終比賽常數是11場
 
解題的思路有點動態規劃的思想,前面的結果對後面有影響,
 
------------------------------------------------分割線-------------------------------------------------------
ps:用代碼實現的話  ,可以使用一個或多個排序數組,將已經同場競技過的馬的順序記錄下來,共後面步驟去做選擇,思路還不成熟,等想明白了 再來完善。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章