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的列表即为所求。

  • 相关阅读:
    Linux主机肉鸡木马minerd导致CPU跑满
    阿里云Redis加速Typecho博客访问
    啪啪啪!敲代码时你喜欢听什么音乐?
    排列组合的去重问题
    01背包变形
    判断两个线段是否相交
    Centos搭建SVN服务器三步曲
    nodejs for centos配置
    AngularJS 授权 + Node.js REST api
    1082 射击比赛 (20 分)C语言
  • 原文地址:https://www.cnblogs.com/asenyang/p/12190747.html
Copyright © 2011-2022 走看看