這是問題所在。有N人,其中之一是國王。每個人都知道國王,而國王不認識任何人。有沒有一個名稱或一些理論,如何最好地找出國王的數量是這種情況下,因爲我們有一個函數,確定我是否知道人我知道人j。當然,我們可以簡單地讓每個人先檢查哪些人不認識任何人,然後檢查每個人是否知道哪一個。但這是訂單N^2,我很好奇,如果有更快的事情。在此先感謝有沒有這個特定的編程挑戰的名稱,我們可以做得更好的O(N^2)?
1
A
回答
9
您可以在O(n)
時間做到這一點。想象一下,包括國王在內的所有人都可以進入舞廳。我們將其稱爲1
到n
。訪問人1
。詢問他們是否知道人2
- 如果沒有,3
等等。他們知道的第一個人v
,訪問並詢問他們是否認識人v + 1
,如果不是v + 2
等等。然後訪問他們認識的第一個人。繼續這樣做,直到您詢問(並可能訪問)n
。
既然每個人都知道國王,其中一個人就會把你引導到那個不認識別人的國王身上,因此國王就不能把你引薦給別人。當你開始詢問最後一個人的時候,你會和國王談話。
大致爲:
int find_king() {
int visiting = 1;
for (int asking_about = 2; asking_about <= n; asking_about++) {
if (knows(visiting, asking_about)) {
visiting = asking_about;
}
}
return visiting;
}
+0
已編輯,所以如果他們知道自己,我們不會問1。 – Kaganar 2014-10-27 22:57:00
相關問題
- 1. 有沒有更好的方式我可以寫這個程序?
- 2. 有沒有想過這個TSQL挑戰?
- 3. 有沒有更好的「軌道」做這個重命名?
- 4. 有沒有更好的方法來編寫這個特定的查詢?
- 5. 一個良好的編程語言,編程代碼挑戰
- 6. 帶有共享ID的JPA @OneToOne - 我可以做得更好嗎?
- 7. 這可以做得更好嗎?
- 8. 有沒有更好的方法來獲得子控件名稱?
- 9. 這是一個足夠好的抽象,還是我可以做得更好?
- 10. Facebook的編程挑戰賽
- 11. 有沒有更好的方法來做這個查詢?
- 12. SSRS - 有沒有更好的方式來做這個表達?
- 13. 有沒有更好的方法來做這個查詢?
- 14. 有沒有更好的方法來做這個MySQL查詢?
- 15. 有沒有更好的方法來做這個LINQ語句塊?
- 16. 有沒有更好的方法來做這個連接?
- 17. 有沒有更好的方法來做這個jQuery選擇?
- 18. 有沒有更好的方法來做這個MYSQL語句?
- 19. 有沒有更好的方法來做這個Python代碼?
- 20. 有沒有更好的方法可以做到這一點?在asp.net mvc
- 21. 如何動態地,以編程方式更改sting變量名,這是具有挑戰性的
- 22. 編程挑戰110106
- 23. Mercurial - 我可以做得更好嗎?
- 24. 我可以做這個沒有全局變量的工作嗎?
- 25. 是否可以通過CloudFlare API挑戰特定的IP地址?
- 26. 我沒有得到列的名稱
- 27. 有沒有更好的方法來編寫這個SQL?
- 28. 有沒有更好的方法來編寫這個函數?
- 29. 有沒有更好的方法來編寫這個SQL查詢?
- 30. 有沒有更好的方法來編寫這個jQuery腳本?
作出這樣的圖表。表示國王的節點具有0個傳出邊緣和N-1個傳入邊緣。 – 2014-10-27 22:26:49
@Cicada - 如果提前給出圖表,那麼這是一個很好的解決方案。如果不是,那麼構造圖就是O(N^2)。 – mbeckish 2014-10-27 23:18:48
@mbeckish我只是給了數據結構,而不是找到國王的算法:) – 2014-10-27 23:26:30