Skip to content

Commit 5c731ec

Browse files
committed
Improved task 3433
1 parent 039c351 commit 5c731ec

File tree

1 file changed

+30
-32
lines changed
  • src/main/java/g3401_3500/s3433_count_mentions_per_user

1 file changed

+30
-32
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,47 @@
11
package g3401_3500.s3433_count_mentions_per_user;
22

3-
// #Medium #Array #Math #Sorting #Simulation #2025_01_27_Time_29_(100.00%)_Space_45.65_(100.00%)
3+
// #Medium #Array #Math #Sorting #Simulation #2025_01_28_Time_12_(99.94%)_Space_45.54_(94.71%)
44

5+
import java.util.ArrayList;
56
import java.util.List;
67

78
public class Solution {
89
public int[] countMentions(int numberOfUsers, List<List<String>> events) {
9-
events.sort(
10-
(a, b) -> {
11-
int time1 = Integer.parseInt(a.get(1));
12-
int time2 = Integer.parseInt(b.get(1));
13-
if (time1 == time2
14-
&& a.get(0).equals("OFFLINE")
15-
&& b.get(0).equals("MESSAGE")) {
16-
return -1;
17-
}
18-
return Integer.parseInt(a.get(1)) - Integer.parseInt(b.get(1));
19-
});
2010
int[] ans = new int[numberOfUsers];
21-
int[] usertimestamp = new int[numberOfUsers];
22-
for (List<String> event : events) {
23-
String msg = event.get(0);
24-
int time = Integer.parseInt(event.get(1));
25-
if (msg.equals("OFFLINE")) {
26-
usertimestamp[Integer.parseInt(event.get(2))] = time + 60;
27-
} else {
28-
String mentionsString = event.get(2);
29-
if (mentionsString.equals("ALL")) {
30-
for (int i = 0; i < numberOfUsers; i++) {
31-
ans[i]++;
32-
}
33-
} else if (mentionsString.equals("HERE")) {
34-
for (int i = 0; i < numberOfUsers; i++) {
35-
if (usertimestamp[i] <= time) {
36-
ans[i]++;
37-
}
11+
List<Integer> l = new ArrayList<>();
12+
int c = 0;
13+
for (int i = 0; i < events.size(); i++) {
14+
String s = events.get(i).get(0);
15+
String ss = events.get(i).get(2);
16+
if (s.equals("MESSAGE")) {
17+
if (ss.equals("ALL") || ss.equals("HERE")) {
18+
c++;
19+
if (ss.equals("HERE")) {
20+
l.add(Integer.parseInt(events.get(i).get(1)));
3821
}
3922
} else {
40-
for (String id : event.get(2).split(" ")) {
41-
int curr = Integer.parseInt(id.substring(2));
42-
ans[curr]++;
23+
String[] sss = ss.split(" ");
24+
for (int j = 0; j < sss.length; j++) {
25+
int jj = Integer.parseInt(sss[j].substring(2, sss[j].length()));
26+
ans[jj]++;
4327
}
4428
}
4529
}
4630
}
31+
for (int i = 0; i < events.size(); i++) {
32+
if (events.get(i).get(0).equals("OFFLINE")) {
33+
int id = Integer.parseInt(events.get(i).get(2));
34+
int a = Integer.parseInt(events.get(i).get(1)) + 60;
35+
for (int j = 0; j < l.size(); j++) {
36+
if (l.get(j) >= a - 60 && l.get(j) < a) {
37+
ans[id]--;
38+
}
39+
}
40+
}
41+
}
42+
for (int i = 0; i < numberOfUsers; i++) {
43+
ans[i] += c;
44+
}
4745
return ans;
4846
}
4947
}

0 commit comments

Comments
 (0)