源_小K算法
說起刷題,想必對于每一個已經在搬磚的讀者都不陌生,曾經那段日日刷題、夜夜復習的痛并快樂的日子,你還記著嗎?
今天分享一個又難又簡單的騰訊面試題,不保證你下次面試會遇上,但是你下次遇上了一定會!
算法面試題
有64匹馬,8條賽道,要找出最快的4匹馬,最少要幾次呢?
初步思考
很多同學可能第一反應就是,這個問題肯定不簡單,應該有一些技巧,但技巧是啥呢,又一時想不出來。
其實呢,先別想得太復雜了,比如我現(xiàn)在就問你一個問題,有沒有可能存在有一匹馬不用跑?
答案當然是不行。
因此每匹馬都需要跑一次,這就是這道題目的條件。
題目分析
那也就是每一匹都得先跑一次,64匹,8個賽道,那就先分8組跑8次。
每一組都會得到8匹的相對速度,也就是在同一組內的名次。
為了方便描述,我們用編號來表示。如A組里面的名次分別用來表示。
因為我們只需要找出最快的4匹,那么肯定不屬于最快的4匹,同理把每一組的后4名先排除。
現(xiàn)在每一組內都有相對名次,但不同的組間是不知道的。如果把A組和B組放在一起,下面的情況都可能存在。
因為是要找最快的,所以選擇每組的第一名再出來跑一次,這樣落后的第一名所在的整組都可以排除。為了描述方便,把最快到最慢的第一名所在的組依次重新命名為A,B...H組。
組間的第一名有了名次關系,可以發(fā)現(xiàn)一定不屬于前4名,因為都在他們前面。同理可排除。同時是最快的,一定屬于前4。那接下來只需在剩下的9匹中找出前3。
除去,其余8匹跑一次。如果在第3名或者更后,那說明已經選出了前3名,也不用再跑了,否則再取前3和一起跑一次,即可得結果。
最多11次一定可以選出最快的4匹。
其他問題
主要的問題集中在以下幾方面_
1、問題一
問_直接用計時器,每次8匹馬分8次跑完,按時間順序排序不就行了嗎?
答_只能說不知道有同學會這樣想,那確定應該在題目上加這個限制,不能用計時器。面試題應該也不會考察你會不會用計時器呀,對不?
那小K再補充一下,只能利用相對名詞通過邏輯推理來找出前4名。
題目沒有說明的限制這確實是一個漏洞,但這樣想那漏洞就多了去了呀,哈哈。
2、問題二
問_馬每次跑的速度都是一樣的嗎?
答_這個也確實應該加上,默認每匹馬的速度不變,不考慮馬兒的生理因素哈。
3、問題三
問_如果有并列名次的馬兒怎么辦?
答_這個也確實應該加上,如果8匹馬速度都一樣,那跑一次就什么信息也得不到,不得不說大家考慮得還真是周到呀。
4、問題四
問_題目說得最少多少次,為什么最后又說最多11次?
答_可能小K描述不夠準確,那小K再重新描述一下_在某種小概率的巧合下,原文也說明了,就是A3排在第3或者更后,那么最少就是10次。不考慮特殊場景最少就是11次,可以穩(wěn)定求解。
這種思維題,其實是很難直接就想清楚整個過程??梢韵认氲煤唵我稽c,往下推一步再看,逐步推進就可以引導出正確的結果了。