|  | 
| 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