|
1 | 1 | package g3401_3500.s3433_count_mentions_per_user |
2 | 2 |
|
3 | | -// #Medium #Array #Math #Sorting #Simulation #2025_01_26_Time_90_(100.00%)_Space_49.08_(100.00%) |
| 3 | +// #Medium #Array #Math #Sorting #Simulation #2025_01_29_Time_52_(100.00%)_Space_47.22_(60.71%) |
4 | 4 |
|
5 | 5 | class Solution { |
6 | 6 | fun countMentions(numberOfUsers: Int, events: List<List<String>>): IntArray { |
7 | | - val sortedEvents = events.sortedWith { a, b -> |
8 | | - val time1 = a[1].toInt() |
9 | | - val time2 = b[1].toInt() |
10 | | - if (time1 == time2 && a[0] == "OFFLINE" && b[0] == "MESSAGE") { |
11 | | - -1 |
12 | | - } else { |
13 | | - time1 - time2 |
14 | | - } |
15 | | - } |
16 | 7 | val ans = IntArray(numberOfUsers) |
17 | | - val userTimestamps = IntArray(numberOfUsers) |
18 | | - for (event in sortedEvents) { |
19 | | - val msg = event[0] |
20 | | - val time = event[1].toInt() |
21 | | - when (msg) { |
22 | | - "OFFLINE" -> { |
23 | | - userTimestamps[event[2].toInt()] = time + 60 |
| 8 | + val l: MutableList<Int?> = ArrayList<Int?>() |
| 9 | + var c = 0 |
| 10 | + for (i in events.indices) { |
| 11 | + val s = events[i][0] |
| 12 | + val ss = events[i][2] |
| 13 | + if (s == "MESSAGE") { |
| 14 | + if (ss == "ALL" || ss == "HERE") { |
| 15 | + c++ |
| 16 | + if (ss == "HERE") { |
| 17 | + l.add(events[i][1].toInt()) |
| 18 | + } |
| 19 | + } else { |
| 20 | + val sss: Array<String?> = ss.split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() |
| 21 | + for (j in sss.indices) { |
| 22 | + val jj = sss[j]!!.substring(2, sss[j]!!.length).toInt() |
| 23 | + ans[jj]++ |
| 24 | + } |
24 | 25 | } |
25 | | - "MESSAGE" -> { |
26 | | - val mentionsString = event[2] |
27 | | - when (mentionsString) { |
28 | | - "ALL" -> { |
29 | | - for (i in 0 until numberOfUsers) { |
30 | | - ans[i]++ |
31 | | - } |
32 | | - } |
33 | | - "HERE" -> { |
34 | | - for (i in 0 until numberOfUsers) { |
35 | | - if (userTimestamps[i] <= time) ans[i]++ |
36 | | - } |
37 | | - } |
38 | | - else -> { |
39 | | - mentionsString.split(" ").forEach { id -> |
40 | | - val curr = id.substring(2).toInt() |
41 | | - ans[curr]++ |
42 | | - } |
43 | | - } |
| 26 | + } |
| 27 | + } |
| 28 | + for (i in events.indices) { |
| 29 | + if (events[i][0] == "OFFLINE") { |
| 30 | + val id = events[i][2].toInt() |
| 31 | + val a = events[i][1].toInt() + 60 |
| 32 | + for (j in l.indices) { |
| 33 | + if (l[j]!! >= a - 60 && l[j]!! < a) { |
| 34 | + ans[id]-- |
44 | 35 | } |
45 | 36 | } |
46 | 37 | } |
47 | 38 | } |
| 39 | + for (i in 0..<numberOfUsers) { |
| 40 | + ans[i] += c |
| 41 | + } |
48 | 42 | return ans |
49 | 43 | } |
50 | 44 | } |
0 commit comments