zoukankan      html  css  js  c++  java
  • leetcode1311

     1 class Solution:
     2     def getLevelFriends(self,friends,visited,id,level,l):
     3         while len(l) > 0 and level > 0:
     4             temp = []
     5             while len(l) > 0:
     6                 cur = l.pop()
     7                 flist = friends[cur]
     8                 for f in flist:
     9                     if visited[f] == 0:
    10                         visited[f] = 1
    11                         temp.append(f)
    12             l = temp[:]
    13             temp.clear()
    14             level -= 1
    15         return l
    16 
    17 
    18     def watchedVideosByFriends(self, watchedVideos: 'List[List[str]]', friends: 'List[List[int]]', id: int, level: int) -> 'List[str]':
    19         n = len(watchedVideos)
    20         visited = [0] * n
    21         visited[id] = 1
    22         friendlist = self.getLevelFriends(friends,visited,id,level,[id])
    23         #print(friendlist)
    24         videscounts = {}
    25         for f in friendlist:
    26             videos = watchedVideos[f]
    27             for v in videos:
    28                 if v not in videscounts:
    29                     videscounts[v] = 1
    30                 else:
    31                     videscounts[v] += 1
    32         
    33         result = [v[0] for v in sorted(videscounts.items(),key=lambda x:(x[1],x[0]))] 
    34         return result

    算法思路:BFS + 多条件排序

    先使用BFS计算n度人脉,通过visited数组记录已经包含在好友关系中的人,得到n度人脉列表。

    再将对列转化成以vidio为key,观看频率为value的字典,然后对字典进行双条件排序,

    先按照value从小到大排序,再按照key从小到大排序,最终得到key的列表即为所求。

  • 相关阅读:
    python操作pymysql
    使用raise语句抛出异常
    异常处理
    01.正太分布模型
    常用正则表达式总结(47条)
    Scrapy项目_苏宁图书信息
    Scrapy项目_阳光热线问政平台
    Scrapy 项目:腾讯招聘
    Python爬虫_糗事百科
    Python爬虫_百度贴吧(title、url、image_url)
  • 原文地址:https://www.cnblogs.com/asenyang/p/12190747.html
Copyright © 2011-2022 走看看