|
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