以前去西安某遊戲公司面試前端開發崗位,考了我一道賽馬題,當場沒想出來,面試也就瓜熟蒂落的涼涼。html
回家以後,我仔細研究了一下,結合網絡上的一些思路,梳理出來一個目前我的認爲的最優解,但不知道會不會存在更少的狀況。前端
本文就結合這道題目,分享一下我我的解此題的一個詳細思路,用圖文的形式去呈現。面試
現有64匹馬,賽場上有8條跑道(一場最多賽8匹)。問,在不用計時器的狀況下,最少狀況下,賽多少場可以找到最快的4匹。如圖:網絡
根據題意,咱們能夠很輕鬆想到,64匹馬可以排成8*8的方陣(一共8組,每組8匹)。spa
恰好每組8匹恰好佔滿8個跑道,不構成浪費。htm
不管怎樣,至少每匹馬都得參加比賽,有參考依據,纔有可能得出結論。blog
如上述分析,將64匹馬隨機分紅8組,每組8匹,讓它們跑去吧。遊戲
這樣咱們至少能夠得出每一組的排名,這裏爲了避免混淆,組統一用ABCDEFGH表示,名次用12345678表示。開發
如今咱們知道每一組的排名,但不能輕易下結論。極端狀況下,A組的8匹有多是最快的8匹,B組的第1也許很快,但比起A組第8,仍然是難以望其項背。get
這樣咱們還不能肯定具體名次,咱們可讓每一組的第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淘汰。
那麼B4~B8以及A5~A8所有淘汰,如今場上只剩下了A1~A4,B1~B3,C1~C2,D1。總共10匹馬。用紅色標記。如圖:
還剩下10匹馬,但咱們已知A1必定是全場最佳,因此剩下9匹馬須要再比一場。
如今只有8個賽道,卻有9匹馬,看樣子是須要讓其中一匹馬在場下看熱鬧了。
而這匹馬最好選擇「邊緣人」,也就是在淘汰邊緣的,相比較而言D1的位置最爲尷尬,ABC組裏邊的非第1,隨時有可能擠掉它成功上位。
因此,選擇D1看熱鬧是最合適不過的了。(由於D1最多拿第4,不然淘汰)
接下來,咱們就讓A2,A3,A4,B1,B2,B3,C1,C2去跑。
跑完以後,這樣咱們能夠參照C1的名次來判斷接下來須要怎麼賽。
若C1是本組第4~7名,則總體2~4名和本組前3一一對應,加上A1的第1名,構成前4。(結束)
若C1是本組第3名,則讓C2和D1加賽一場,搶第4名。(加賽一場,結束)
若C1是本組第2名,則前4就是A1,C1,C2及D1,C2和D1沒必要進行季軍爭奪,怎麼爭奪都是一個第3一個第4。(結束)
結合上述分析,看C1最後一場若是不跑第3就是最少狀況,最少須要10場,(8+1+1)。
這僅僅是目前本人認爲最少的場次,若是有更犀利的思路,我會積極採納!