You are given the logs for users’ actions on LeetCode, and an integer k. The logs are represented by a 2D integer array logs where each logs[i] = [IDi, timei] indicates that the user with IDi performed an action at the minute
timei.
Multiple users can perform actions simultaneously, and a single user can perform multiple actions in the same minute.
The user active minutes (UAM) for a given user is defined as the number of unique minutes in which the user performed an action on LeetCode. A minute can only be counted once, even if multiple actions occur during it.
You are to calculate a 1-indexed array answer of size k such that, for each j (1 <= j <= k), answer[j] is the number of users whose UAM equals j.
Input: logs =[[0,5],[1,2],[0,2],[0,5],[1,3]], k =5Output: [0,2,0,0,0]Explanation:
The user with ID=0 performed actions at minutes 5,2, and 5 again. Hence, they have a UAM of 2(minute 5is only counted once).The user with ID=1 performed actions at minutes 2 and 3. Hence, they have a UAM of 2.Since both users have a UAM of 2, answer[2]is2, and the remaining answer[j] values are 0.
Input: logs =[[1,1],[2,2],[2,3]], k =4Output: [1,1,0,0]Explanation:
The user with ID=1 performed a single action at minute 1. Hence, they have a UAM of 1.The user with ID=2 performed actions at minutes 2 and 3. Hence, they have a UAM of 2.There is one user with a UAM of 1 and one with a UAM of 2.Hence, answer[1]=1, answer[2]=1, and the remaining values are 0.
We use a hash map to track the set of unique minutes for each user. Then, for each user, we count how many users have each possible UAM (user active minutes) value.
classSolution {
publicint[]findingUsersActiveMinutes(int[][] logs, int k) {
Map<Integer, Set<Integer>> mp =new HashMap<>();
for (int[] log : logs) mp.computeIfAbsent(log[0], x ->new HashSet<>()).add(log[1]);
int[] ans =newint[k];
for (Set<Integer> st : mp.values()) {
int uam = st.size();
if (uam >= 1 && uam <= k) ans[uam-1]++;
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution {
funfindingUsersActiveMinutes(logs: Array<IntArray>, k: Int): IntArray {
val mp = mutableMapOf<Int, MutableSet<Int>>()
for (log in logs) mp.computeIfAbsent(log[0]) { mutableSetOf() }.add(log[1])
val ans = IntArray(k)
for (st in mp.values) {
val uam = st.size
if (uam in1..k) ans[uam-1]++ }
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution:
deffindingUsersActiveMinutes(self, logs: list[list[int]], k: int) -> list[int]:
from collections import defaultdict
mp = defaultdict(set)
for uid, t in logs:
mp[uid].add(t)
ans = [0] * k
for st in mp.values():
uam = len(st)
if1<= uam <= k:
ans[uam-1] +=1return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
impl Solution {
pubfnfinding_users_active_minutes(logs: Vec<Vec<i32>>, k: i32) -> Vec<i32> {
use std::collections::{HashMap, HashSet};
letmut mp: HashMap<i32, HashSet<i32>>= HashMap::new();
for log in logs {
mp.entry(log[0]).or_default().insert(log[1]);
}
letmut ans =vec![0; k asusize];
for st in mp.values() {
let uam = st.len();
if uam >=1&& uam <= k asusize {
ans[uam-1] +=1;
}
}
ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
findingUsersActiveMinutes(logs: number[][], k: number):number[] {
constmp=newMap<number, Set<number>>();
for (const [id, t] oflogs) {
if (!mp.has(id)) mp.set(id, newSet());
mp.get(id)!.add(t);
}
constans= Array(k).fill(0);
for (conststofmp.values()) {
constuam=st.size;
if (uam>=1&&uam<=k) ans[uam-1]++;
}
returnans;
}
}