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的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,353评论 0 33
  • 北方的春天来得很缓慢,如果你不留心,不会发现有花开了 按耐不住的心情,跑遍了校园,留下了想留下来的。 拍摄设备:i...
    木北Y阅读 1,859评论 0 0
  • 最后是个幌子,它有很多前缀 比如,五月的最后一天 我尝到了入季以来的第一个西瓜 甜不甜,它困扰着拿刀的人 瓜农卖给...
    倩何人换取阅读 2,915评论 0 2
  • 收拾书房,翻出一本十年前的杂志。看着署有我名字的小说,一时之间感慨良多。 十年,足以让一个人成熟成长甚至成名。——...
    奔跑的图图阅读 3,290评论 0 4
  • 01 办公室不透气很闷热,心情很容易发燥。 有天早上一到公司就发现原来的打卡机已经不再原来的位置,废弃了一年多在某...
    小李z阅读 2,860评论 4 3