Skip to content

Commit 4c9aa98

Browse files
authored
Create Count Mentions Per User.java
1 parent d6786b2 commit 4c9aa98

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

Medium/Count Mentions Per User.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
class Solution {
2+
public int[] countMentions(int numberOfUsers, List<List<String>> eventLog) {
3+
List<Event> events = eventLog.stream()
4+
.map(Event::buildEvent)
5+
.sorted()
6+
.collect(Collectors.toList());
7+
Map<Integer, Integer> offlineUsers = new HashMap<>();
8+
int[] mentions = new int[numberOfUsers];
9+
for (Event event : events) {
10+
if (event.message().equals("OFFLINE")) {
11+
offlineUsers.put(Integer.parseInt(event.mentionString()), event.timestamp());
12+
} else {
13+
int timestamp = event.timestamp();
14+
List<Integer> onlineUsers = offlineUsers.entrySet()
15+
.stream()
16+
.filter(t -> timestamp - t.getValue() >= 60)
17+
.map(Map.Entry::getKey)
18+
.collect(Collectors.toList());
19+
onlineUsers.forEach(offlineUsers::remove);
20+
String mentionString = event.mentionString();
21+
if (mentionString.equals("ALL")) {
22+
for (int i = 0; i < numberOfUsers; i++) {
23+
mentions[i]++;
24+
}
25+
} else if (mentionString.equals("HERE")) {
26+
for (int i = 0; i < numberOfUsers; i++) {
27+
if (!offlineUsers.containsKey(i)) {
28+
mentions[i]++;
29+
}
30+
}
31+
} else {
32+
String[] usersMentioned = mentionString.split(" ");
33+
for (String user : usersMentioned) {
34+
int userId = Integer.parseInt(user.substring(2));
35+
mentions[userId]++;
36+
}
37+
}
38+
}
39+
}
40+
return mentions;
41+
}
42+
43+
private record Event(String message, int timestamp, String mentionString) implements Comparable<Event> {
44+
45+
public static Event buildEvent(List<String> event) {
46+
String message = event.get(0);
47+
int timestamp = Integer.parseInt(event.get(1));
48+
String mentionString = event.get(2);
49+
return new Event(message, timestamp, mentionString);
50+
}
51+
52+
@Override
53+
public int compareTo(Event o) {
54+
int c = this.timestamp - o.timestamp;
55+
if (c != 0) {
56+
return c;
57+
}
58+
return o.message().compareTo(this.message());
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)