識別名人 · Find the Celebrity
阿新 • • 發佈:2018-02-15
span 其他 英文 時間 space 意義 follow 通過 函數 。從而降低復雜度到n-1 + 1 = n
[抄題]:
假設你和 n
個人在一個聚會中(標記為 0
到 n - 1
),其中可能存在一個名人。名人的定義是所有其他 n - 1
人都認識他/她,但他/她不知道任何一個。
現在你想要找出這個名人是誰或者驗證這個名人不存在。你唯一可以做的事情就是提出如下問題:“你好,A,你認識B嗎?” 來獲取A是否認識B。您需要通過詢問盡可能少的問題(以漸近的意義)來找出名人是誰(或驗證其不存在)。
你得到一個輔助函數 bool know(a,b)
,它會告訴你A是否知道B.實現一個函數 int findCelebrity(n)
,你的函數應該使 knows
的調用次數最少。
[暴力解法]:
n個人問n-1遍
時間分析:true的時候可以排除一個人,false的時候可以排除一個人
空間分析:
[思維問題]:
不知兩兩比較的時候是不是要用i i+1,感覺換起來很麻煩:定義一個ans,掃一遍i的過程中改變唯一的結果ans即可
[一句話思路]:
[輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常情況(不合法不合理的輸入):
[畫圖]:
[一刷]:
- 不知道為啥最後還要檢驗是不是名人:防止兩人互相認識的特殊情況(要考慮到)
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分鐘肉眼debug的結果]:
[總結]:
[復雜度]:Time complexity: O() Space complexity: O()
[英文數據結構或算法,為什麽不用別的數據結構或算法]:
[其他解法]:
[Follow Up]:
[LC給出的題目變變變]:
[代碼風格] :
識別名人 · Find the Celebrity