这道题目主要考察的是图论的知识(无向图),寻找最短距离为k的好友可以进行广度优先遍历(BFS),遍历k次时队列中保留的就是需要k步才能到达的好友,然后再取出相应视频,再排序:
class Solution:
def watchedVideosByFriends(self, watchedVideos: List[List[str]], friends: List[List[int]], id: int, level: int) -> List[str]:
n = len(friends)
visited = [False] * n
q = collections.deque([id])
visited[id] = True
for _ in range(level):
for _ in range(len(q)):
curr = q.popleft()
for v in friends[curr]:
if not visited[v]:
q.append(v)
visited[v] = True
videos = collections.Counter()
for i in range(len(q)):
v = q.pop()
for video in watchedVideos[v]:
videos[video] += 1
videos = list(videos.items())
print(videos)
videos.sort(key = lambda x: (x[1], x[0]))
videos = [video[0] for video in videos]
return videos