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.
Return the array answer as described above.
Example 1:
Input: logs = [[0,5],[1,2],[0,2],[0,5],[1,3]], k = 5 Output: [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 5 is 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] is 2, and the remaining answer[j] values are 0.
Example 2:
Input: logs = [[1,1],[2,2],[2,3]], k = 4 Output: [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.
Constraints:
1 <= logs.length <= 1040 <= IDi <= 1091 <= timei <= 105k is in the range [The maximum UAM for a user, 105].Problem Overview: You receive a list of logs where each entry contains a userId and a minute. A user's active minutes are the number of unique minutes they appear in the logs. The task is to compute how many users have exactly 1..k unique active minutes and return the frequency array.
Approach 1: HashMap to Track Unique Minutes (Time: O(n), Space: O(n))
Use a hash map where the key is userId and the value is a set of minutes the user was active. Iterate through the logs and insert each minute into the corresponding user's set. Because sets automatically remove duplicates, repeated log entries for the same minute are ignored. After processing all logs, iterate through the map and compute each user's unique minute count. Maintain a result array of size k where index i tracks how many users have i + 1 active minutes. This approach relies heavily on fast hash lookups and is a classic pattern when solving counting problems with hash tables and arrays.
Approach 2: Two-Pass Calculation (Time: O(n), Space: O(n))
The same core idea can be structured as two clear passes over the data. In the first pass, build a mapping from userId to a set of unique minutes using a hash map. In the second pass, iterate over each user's set, compute the set size, and increment the corresponding index in the result array if the size is ≤ k. Separating the logic into two phases makes the code easier to reason about and debug during interviews. The algorithm still performs constant-time hash insertions and set operations, making it efficient for large log inputs. This technique frequently appears in problems involving hash table aggregation or deduplication tasks.
Recommended for interviews: The hash map + set approach is the expected solution. Interviewers want to see that you recognize duplicate minutes must be filtered using a set and that you can convert those counts into a frequency distribution of size k. Explaining the logic clearly and handling edge cases such as duplicate logs demonstrates solid command of hash-based counting patterns.
This approach utilizes a HashMap to keep track of each user's unique active minutes.
Steps:
k to store the number of users with a specific count of unique active minutes.This Python solution uses a defaultdict of sets to track unique minutes for each user.
It iterates over the logs and populates the set with unique minutes for each user. Then it fills the result array based on the unique minute counts.
Python
C++
Java
C#
JavaScript
Time Complexity: O(n), where n is the number of elements in logs. Each log entry is processed once.
Space Complexity: O(m), where m is the number of distinct user ID and minute pairs.
This approach performs two separate passes over the logs data.
Steps:
In this two-pass Python solution, the set collects unique minute logs in the first pass, and the result tally is compiled in a separate pass.
Python
C++
Java
C#
JavaScript
Time Complexity: O(n), where n is the number of log entries.
Space Complexity: O(m), accommodating unique user-minute entries.
We use a hash table d to record all the unique operation times of each user, and then traverse the hash table to count the number of active minutes for each user. Finally, we count the distribution of the number of active minutes for each user.
The time complexity is O(n), and the space complexity is O(n), where n is the length of the logs array.
Python
Java
C++
Go
TypeScript
| Approach | Complexity |
|---|---|
| Approach 1: HashMap to Track Unique Minutes | Time Complexity: O(n), where n is the number of elements in logs. Each log entry is processed once. Space Complexity: O(m), where m is the number of distinct user ID and minute pairs. |
| Approach 2: Two-Pass Calculation | Time Complexity: O(n), where n is the number of log entries. Space Complexity: O(m), accommodating unique user-minute entries. |
| Hash Table | — |
| Approach | Time | Space | When to Use |
|---|---|---|---|
| HashMap to Track Unique Minutes | O(n) | O(n) | General case. Efficient when logs may contain duplicate minutes per user. |
| Two-Pass Calculation | O(n) | O(n) | Cleaner separation of aggregation and counting logic, easier to reason about in interviews. |
LeetCode 1817. Finding the Users Active Minutes | Medium | 🏆 Weekly Contest 235 |Algorithm Explained • Cherry Coding [IIT-G] • 2,312 views views
Watch 9 more video solutions →Practice Finding the Users Active Minutes with our built-in code editor and test cases.
Practice on FleetCodePractice this problem
Open in Editor