题目: https://leetcode.com/problems/find-the-celebrity/
难度 : Medium
思路:
算法考试考过
celebrity 是 每个人都知道他,而他不认识任何别的人。
如果用图来看,那就每个别的人都有箭头指向c,而c没有任何出去的箭头。
O(N^2)的代码还是还是很容易想到的
但是我们可以有提升,那么就是可以check knows(a,b)
,如果 a knows b,那么可以排除a是celebrity,否则可以排除b是celebrity.
最后还要确认一遍是否这个是真的celebrity
AC代码
# The knows API is already defined for you.
# @param a, person a
# @param b, person b
# @return a boolean, whether a knows b
# def knows(a, b):
class Solution(object):
def findCelebrity(self, n):
"""
:type n: int
:rtype: int
"""
if n == 0:
return -1
c = 0
for i in xrange(1,n):
if not knows(i, c):
c = i
for i in range(n):
if c != i:
if not knows(i,c) or knows(c,i):
return -1
return c