今天看面試題看到了阿里的明星問題,覺得大家說的太高深了,說一下我的解法吧:

題目:有N個人,其中一個明星和n-1個群眾,群眾都認識明星,明星不認識任何群眾,群眾和群眾之間的認識關系不知道,現在如果你是機器人R2T2,你每次問一個人是否認識另外一個人的代價為O(1),試設計一種算法找出明星,并給出時間復雜度(沒有復雜度不得分)。

我的解法( 復雜度O(n) ):
// bool known(A, B) 問A認識B不?
Person persons[n];
// init persons
Person p = persons[0];
for(int i = 1; i < n; i++) {
    if(!known(persons[i], p)) { // 不認識,說明p不是明星
      p = persons[i];
    }
    // else 認識,說明persons[i]不是明星
}
// p 就是所求的明星