Leetcode - Find the Celebrity

My code:

/* The knows API is defined in the parent class Relation.
      boolean knows(int a, int b); */

public class Solution extends Relation {
    public int findCelebrity(int n) {
        if (n <= 0) {
            return -1;
        }
        
        int candidate = 0;
        for (int i = 1; i < n; i++) {
            if (knows(candidate, i)) {
                candidate = i;
            }
        }
        
        for (int i = 0; i < n; i++) {
            if (i == candidate) {
                continue;
            }
            else if (!knows(i, candidate) || knows(candidate, i)) {
                return -1;
            }
        }
        
        return candidate;
    }
}

逻辑题,interesting, 没做出来。
reference:
https://discuss.leetcode.com/topic/23534/java-solution-two-pass

如果 a 不认识任何人,不代表a是名人。
如果 a 不被任何人认识,不代表a是名人
只有当a不认识任何人,并且,a不被任何人认识,a才是名人

如果a 认识 b, a不可能是名人
如果a不认识b,b不可能是名人

就是这几个最重要的逻辑,搞清楚就行了。

Anyway, Good luck, Richardo! -- 09/04/2016

你可能感兴趣的:(Leetcode - Find the Celebrity)