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