277. Find the Celebrity

https://leetcode.com/problems/find-the-celebrity/description/

image.png

TARGET不认识任何人,别人都认识他。
我们假设随机取一个人,如果这个人是TARGET,他往后走 应该不认识其他人,后面那个不被他认识的人,一定不会是TARGET。如果他认识了后面一个人,说明他本身一定不是TARGET,所以我们就可以看这个被认识的人,认不认识其他人。
这样代码就有思路了。因为每做一次CALL,都至少可以排除掉一个人,要么是后面那个,要么是自己。

public int findCelebrity(int n) {
        int pos = 0;
        for(int i = 1; i < n; i++){
            
            boolean knowNext = knows(pos,i);
            if(knowNext){
                pos = i;
            }
        }
        for(int i = 0; i < n; i++){
            if(i==pos || (!knows(pos,i) && knows(i,pos))) continue;
            return -1;
        }
        return pos;
    }

你可能感兴趣的:(277. Find the Celebrity)