Get Watched Videos by Your Friends
给一个list 表示朋友看的视频, 另一个list表示朋友之间的关系, 然后还有id, 就是你是谁, 还有level就是找几个friend level. 这个题就是普通的bfs, 注意一下查重.
class Solution {
public List<String> watchedVideosByFriends(List<List<String>> watchedVideos, int[][] friends, int id, int level) {
boolean[] check = new boolean[watchedVideos.size()];
Arrays.fill(check, false);
Queue<Integer> q = new LinkedList<>();
q.add(id);
check[id] = true;
List<Map.Entry<String, Integer>> tt = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
while (level > 0) {
int size = q.size();
for (int i = 0; i < size; i++) {
int ii = q.poll();
for (int iii : friends[ii]) {
if (check[iii])
continue;
check[iii] = true;
q.add(iii);
}
}
level--;
}
while (!q.isEmpty()) {
List<String> list = watchedVideos.get(q.poll());
for (String s : list) {
map.put(s, map.getOrDefault(s, 0) + 1);
}
}
tt.addAll(map.entrySet());
Collections.sort(tt, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if (o1.getValue() != o2.getValue())
return o1.getValue() - o2.getValue();
else
return o1.getKey().compareTo(o2.getKey());
}
});
List<String> res = new ArrayList<>();
for (Map.Entry<String, Integer> t : tt)
res.add(t.getKey());
return res;
}
}