Skip to content

Commit c840127

Browse files
committed
feat: add solutions to lc problem: No.1311
No.1311.Get Watched Videos by Your Friends
1 parent b128847 commit c840127

File tree

4 files changed

+193
-4
lines changed

4 files changed

+193
-4
lines changed

solution/1300-1399/1311.Get Watched Videos by Your Friends/README.md

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,22 +61,85 @@ C -> 2
6161

6262
<!-- 这里可写通用的实现逻辑 -->
6363

64+
BFS。
65+
6466
<!-- tabs:start -->
6567

6668
### **Python3**
6769

6870
<!-- 这里可写当前语言的特殊实现逻辑 -->
6971

7072
```python
71-
73+
class Solution:
74+
def watchedVideosByFriends(self, watchedVideos: List[List[str]], friends: List[List[int]], id: int, level: int) -> List[str]:
75+
n = len(friends)
76+
vis = [False] * n
77+
q = deque([id])
78+
vis[id] = True
79+
for _ in range(level):
80+
size = len(q)
81+
for _ in range(size):
82+
u = q.popleft()
83+
for v in friends[u]:
84+
if not vis[v]:
85+
q.append(v)
86+
vis[v] = True
87+
freq = Counter()
88+
for _ in range(len(q)):
89+
u = q.pop()
90+
for w in watchedVideos[u]:
91+
freq[w] += 1
92+
videos = list(freq.items())
93+
videos.sort(key=lambda x: (x[1], x[0]))
94+
return [v[0] for v in videos]
7295
```
7396

7497
### **Java**
7598

7699
<!-- 这里可写当前语言的特殊实现逻辑 -->
77100

78101
```java
79-
102+
class Solution {
103+
public List<String> watchedVideosByFriends(List<List<String>> watchedVideos, int[][] friends, int id, int level) {
104+
int n = friends.length;
105+
boolean[] vis = new boolean[n];
106+
Deque<Integer> q = new LinkedList<>();
107+
q.offerLast(id);
108+
vis[id] = true;
109+
while (level-- > 0) {
110+
for (int i = q.size(); i > 0; --i) {
111+
int u = q.pollFirst();
112+
for(int v : friends[u]) {
113+
if (!vis[v]) {
114+
q.offerLast(v);
115+
vis[v] = true;
116+
}
117+
}
118+
}
119+
}
120+
Map<String, Integer> freq = new HashMap<>();
121+
while (!q.isEmpty()) {
122+
for (String w : watchedVideos.get(q.pollFirst())) {
123+
freq.put(w, freq.getOrDefault(w, 0) + 1);
124+
}
125+
}
126+
List<Map.Entry<String, Integer>> t = new ArrayList<>(freq.entrySet());
127+
t.sort((a, b) -> {
128+
if (a.getValue() > b.getValue()) {
129+
return 1;
130+
}
131+
if (a.getValue() < b.getValue()) {
132+
return -1;
133+
}
134+
return a.getKey().compareTo(b.getKey());
135+
});
136+
List<String> ans = new ArrayList<>();
137+
for (Map.Entry<String, Integer> e : t) {
138+
ans.add(e.getKey());
139+
}
140+
return ans;
141+
}
142+
}
80143
```
81144

82145
### **...**

solution/1300-1399/1311.Get Watched Videos by Your Friends/README_EN.md

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,81 @@ You have id = 0 (green color in the figure) and the only friend of your friends
5353

5454
## Solutions
5555

56+
BFS.
57+
5658
<!-- tabs:start -->
5759

5860
### **Python3**
5961

6062
```python
61-
63+
class Solution:
64+
def watchedVideosByFriends(self, watchedVideos: List[List[str]], friends: List[List[int]], id: int, level: int) -> List[str]:
65+
n = len(friends)
66+
vis = [False] * n
67+
q = deque([id])
68+
vis[id] = True
69+
for _ in range(level):
70+
size = len(q)
71+
for _ in range(size):
72+
u = q.popleft()
73+
for v in friends[u]:
74+
if not vis[v]:
75+
q.append(v)
76+
vis[v] = True
77+
freq = Counter()
78+
for _ in range(len(q)):
79+
u = q.pop()
80+
for w in watchedVideos[u]:
81+
freq[w] += 1
82+
videos = list(freq.items())
83+
videos.sort(key=lambda x: (x[1], x[0]))
84+
return [v[0] for v in videos]
6285
```
6386

6487
### **Java**
6588

6689
```java
67-
90+
class Solution {
91+
public List<String> watchedVideosByFriends(List<List<String>> watchedVideos, int[][] friends, int id, int level) {
92+
int n = friends.length;
93+
boolean[] vis = new boolean[n];
94+
Deque<Integer> q = new LinkedList<>();
95+
q.offerLast(id);
96+
vis[id] = true;
97+
while (level-- > 0) {
98+
for (int i = q.size(); i > 0; --i) {
99+
int u = q.pollFirst();
100+
for(int v : friends[u]) {
101+
if (!vis[v]) {
102+
q.offerLast(v);
103+
vis[v] = true;
104+
}
105+
}
106+
}
107+
}
108+
Map<String, Integer> freq = new HashMap<>();
109+
while (!q.isEmpty()) {
110+
for (String w : watchedVideos.get(q.pollFirst())) {
111+
freq.put(w, freq.getOrDefault(w, 0) + 1);
112+
}
113+
}
114+
List<Map.Entry<String, Integer>> t = new ArrayList<>(freq.entrySet());
115+
t.sort((a, b) -> {
116+
if (a.getValue() > b.getValue()) {
117+
return 1;
118+
}
119+
if (a.getValue() < b.getValue()) {
120+
return -1;
121+
}
122+
return a.getKey().compareTo(b.getKey());
123+
});
124+
List<String> ans = new ArrayList<>();
125+
for (Map.Entry<String, Integer> e : t) {
126+
ans.add(e.getKey());
127+
}
128+
return ans;
129+
}
130+
}
68131
```
69132

70133
### **...**
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
public List<String> watchedVideosByFriends(List<List<String>> watchedVideos, int[][] friends, int id, int level) {
3+
int n = friends.length;
4+
boolean[] vis = new boolean[n];
5+
Deque<Integer> q = new LinkedList<>();
6+
q.offerLast(id);
7+
vis[id] = true;
8+
while (level-- > 0) {
9+
for (int i = q.size(); i > 0; --i) {
10+
int u = q.pollFirst();
11+
for(int v : friends[u]) {
12+
if (!vis[v]) {
13+
q.offerLast(v);
14+
vis[v] = true;
15+
}
16+
}
17+
}
18+
}
19+
Map<String, Integer> freq = new HashMap<>();
20+
while (!q.isEmpty()) {
21+
for (String w : watchedVideos.get(q.pollFirst())) {
22+
freq.put(w, freq.getOrDefault(w, 0) + 1);
23+
}
24+
}
25+
List<Map.Entry<String, Integer>> t = new ArrayList<>(freq.entrySet());
26+
t.sort((a, b) -> {
27+
if (a.getValue() > b.getValue()) {
28+
return 1;
29+
}
30+
if (a.getValue() < b.getValue()) {
31+
return -1;
32+
}
33+
return a.getKey().compareTo(b.getKey());
34+
});
35+
List<String> ans = new ArrayList<>();
36+
for (Map.Entry<String, Integer> e : t) {
37+
ans.add(e.getKey());
38+
}
39+
return ans;
40+
}
41+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def watchedVideosByFriends(self, watchedVideos: List[List[str]], friends: List[List[int]], id: int, level: int) -> List[str]:
3+
n = len(friends)
4+
vis = [False] * n
5+
q = deque([id])
6+
vis[id] = True
7+
for _ in range(level):
8+
size = len(q)
9+
for _ in range(size):
10+
u = q.popleft()
11+
for v in friends[u]:
12+
if not vis[v]:
13+
q.append(v)
14+
vis[v] = True
15+
freq = Counter()
16+
for _ in range(len(q)):
17+
u = q.pop()
18+
for w in watchedVideos[u]:
19+
freq[w] += 1
20+
videos = list(freq.items())
21+
videos.sort(key=lambda x: (x[1], x[0]))
22+
return [v[0] for v in videos]

0 commit comments

Comments
 (0)