|
1 | 1 | package g3401_3500.s3433_count_mentions_per_user;
|
2 | 2 |
|
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%) |
4 | 4 |
|
| 5 | +import java.util.ArrayList; |
5 | 6 | import java.util.List;
|
6 | 7 |
|
7 | 8 | public class Solution {
|
8 | 9 | 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 |
| - }); |
20 | 10 | 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))); |
38 | 21 | }
|
39 | 22 | } 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]++; |
43 | 27 | }
|
44 | 28 | }
|
45 | 29 | }
|
46 | 30 | }
|
| 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 | + } |
47 | 45 | return ans;
|
48 | 46 | }
|
49 | 47 | }
|
0 commit comments