Find the Celebrity

medium graph two pointers

Problem

A celebrity is known by everyone but knows nobody. Given an n-person party with a knows(a,b) oracle, return the celebrity's index, or -1 if none.

Inputn = 4, knows = {(0,1),(0,2),(1,2),(3,2)}
Output2
Person 2 is known by 0,1,3 and knows nobody.

def find_celebrity(n, knows):
    cand = 0
    for i in range(1, n):
        if knows(cand, i):
            cand = i
    for i in range(n):
        if i == cand: continue
        if knows(cand, i) or not knows(i, cand):
            return -1
    return cand
function findCelebrity(n, knows) {
  let cand = 0;
  for (let i = 1; i < n; i++) if (knows(cand, i)) cand = i;
  for (let i = 0; i < n; i++) {
    if (i === cand) continue;
    if (knows(cand, i) || !knows(i, cand)) return -1;
  }
  return cand;
}
class Solution {
    public int findCelebrity(int n) {
        int cand = 0;
        for (int i = 1; i < n; i++) if (knows(cand, i)) cand = i;
        for (int i = 0; i < n; i++) {
            if (i == cand) continue;
            if (knows(cand, i) || !knows(i, cand)) return -1;
        }
        return cand;
    }
}
int findCelebrity(int n) {
    int cand = 0;
    for (int i = 1; i < n; i++) if (knows(cand, i)) cand = i;
    for (int i = 0; i < n; i++) {
        if (i == cand) continue;
        if (knows(cand, i) || !knows(i, cand)) return -1;
    }
    return cand;
}
Time: O(n) Space: O(1)