前几天我被要求写一个基本方法,当给两个朋友时,如果他们有联系(我的意思是他们是朋友的朋友的朋友)返回 true,如果他们不相关则返回 false(没有他们任一好友列表中的一个已连接)。
在和这个人一起工作之后,这是我们得出的基本算法:
def is_linked(friend_a, friend_b, visited = {}):
is_found = False
friends = friend_a.get_friends()
# You can assume this method is O(1)
if friends.contains(friend_b):
return True
visited[friend_a] = 1
for friend in friends:
# Prevents infinite recursion
# Assume O(1)
if friend in visited:
next
is_found = is_linked(friend, friend_b, visited)
if is_found:
last
del visited[friend_a]
return is_found
该算法的最坏情况时间复杂度是多少? 我们每个人都提出了自己的答案,由于我们无法达成协议,我希望在这里独立验证。