diff --git a/src/solution/mod.rs b/src/solution/mod.rs index 842f2d20..8354b983 100644 --- a/src/solution/mod.rs +++ b/src/solution/mod.rs @@ -1369,3 +1369,4 @@ mod s1813_sentence_similarity_iii; mod s1814_count_nice_pairs_in_an_array; mod s1815_maximum_number_of_groups_getting_fresh_donuts; mod s1816_truncate_sentence; +mod s1817_finding_the_users_active_minutes; diff --git a/src/solution/s1817_finding_the_users_active_minutes.rs b/src/solution/s1817_finding_the_users_active_minutes.rs new file mode 100644 index 00000000..18def33a --- /dev/null +++ b/src/solution/s1817_finding_the_users_active_minutes.rs @@ -0,0 +1,93 @@ +/** + * [1817] Finding the Users Active Minutes + * + * 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 <= 10^4 + * 0 <= IDi <= 10^9 + * 1 <= timei <= 10^5 + * k is in the range [The maximum UAM for a user, 10^5]. + * + */ +pub struct Solution {} + +// problem: https://leetcode.com/problems/finding-the-users-active-minutes/ +// discuss: https://leetcode.com/problems/finding-the-users-active-minutes/discuss/?currentPage=1&orderBy=most_votes&query= + +// submission codes start here + +impl Solution { + pub fn finding_users_active_minutes(logs: Vec>, k: i32) -> Vec { + let mut result = vec![0; k as usize]; + let mut hm: std::collections::HashMap> = std::collections::HashMap::new(); + + for log in logs { + let user_id = log[0]; + let minute = log[1]; + + hm.entry(user_id).or_default().push(minute) + } + + for (_user_id, mut minutes) in hm { + minutes.sort(); + minutes.dedup(); + + result[minutes.len() - 1] += 1; + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_1817_example_1() { + let logs = vec![vec![0, 5], vec![1, 2], vec![0, 2], vec![0, 5], vec![1, 3]]; + let k = 5; + + let result = vec![0, 2, 0, 0, 0]; + + assert_eq!(Solution::finding_users_active_minutes(logs, k), result); + } + + #[test] + fn test_1817_example_2() { + let logs = vec![vec![1, 1], vec![2, 2], vec![2, 3]]; + let k = 4; + + let result = vec![1, 1, 0, 0]; + + assert_eq!(Solution::finding_users_active_minutes(logs, k), result); + } +}