Skip to content

Commit

Permalink
1817. Finding the Users Active Minutes: AC
Browse files Browse the repository at this point in the history
  • Loading branch information
tan-wei committed Dec 25, 2024
1 parent e90287a commit 4ed6bda
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/solution/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
93 changes: 93 additions & 0 deletions src/solution/s1817_finding_the_users_active_minutes.rs
Original file line number Diff line number Diff line change
@@ -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<Vec<i32>>, k: i32) -> Vec<i32> {
let mut result = vec![0; k as usize];
let mut hm: std::collections::HashMap<i32, Vec<i32>> = 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);
}
}

0 comments on commit 4ed6bda

Please sign in to comment.