1. 程式人生 > >識別名人 · Find the Celebrity

識別名人 · Find the Celebrity

span 其他 英文 時間 space 意義 follow 通過 函數

[抄題]:

假設你和 n 個人在一個聚會中(標記為 0n - 1),其中可能存在一個名人。名人的定義是所有其他 n - 1 人都認識他/她,但他/她不知道任何一個。
現在你想要找出這個名人是誰或者驗證這個名人不存在。你唯一可以做的事情就是提出如下問題:“你好,A,你認識B嗎?” 來獲取A是否認識B。您需要通過詢問盡可能少的問題(以漸近的意義)來找出名人是誰(或驗證其不存在)。
你得到一個輔助函數 bool know(a,b),它會告訴你A是否知道B.實現一個函數 int findCelebrity(n),你的函數應該使 knows 的調用次數最少。

[暴力解法]:

n個人問n-1遍

時間分析:true的時候可以排除一個人,false的時候可以排除一個人

。從而降低復雜度到n-1 + 1 = n

空間分析:

[思維問題]:

不知兩兩比較的時候是不是要用i i+1,感覺換起來很麻煩:定義一個ans,掃一遍i的過程中改變唯一的結果ans即可

[一句話思路]:

[輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常情況(不合法不合理的輸入):

[畫圖]:

[一刷]:

  1. 不知道為啥最後還要檢驗是不是名人:防止兩人互相認識的特殊情況(要考慮到)

[二刷]:

[三刷]:

[四刷]:

[五刷]:

[五分鐘肉眼debug的結果]:

[總結]:

[復雜度]:Time complexity: O() Space complexity: O()

[英文數據結構或算法,為什麽不用別的數據結構或算法]:

[其他解法]:

[Follow Up]:

[LC給出的題目變變變]:

[代碼風格] :

識別名人 · Find the Celebrity