diff --git a/README.md b/README.md index 5aef8af29..e1034c1d6 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ LeetCode | # | Title | Solution | Difficulty | |---| ----- | -------- | ---------- | +|1817|[Finding the Users Active Minutes](https://leetcode.com/problems/finding-the-users-active-minutes/) | [C++](./algorithms/cpp/findingTheUsersActiveMinutes/FindingTheUsersActiveMinutes.cpp)|Medium| |1816|[Truncate Sentence](https://leetcode.com/problems/truncate-sentence/) | [C++](./algorithms/cpp/truncateSentence/TruncateSentence.cpp)|Easy| |1808|[Maximize Number of Nice Divisors](https://leetcode.com/problems/maximize-number-of-nice-divisors/) | [C++](./algorithms/cpp/maximizeNumberOfNiceDivisors/MaximizeNumberOfNiceDivisors.cpp)|Hard| |1807|[Evaluate the Bracket Pairs of a String](https://leetcode.com/problems/evaluate-the-bracket-pairs-of-a-string/) | [C++](./algorithms/cpp/evaluateTheBracketPairsOfAString/EvaluateTheBracketPairsOfAString.cpp)|Medium| diff --git a/algorithms/cpp/findingTheUsersActiveMinutes/FindingTheUsersActiveMinutes.cpp b/algorithms/cpp/findingTheUsersActiveMinutes/FindingTheUsersActiveMinutes.cpp new file mode 100644 index 000000000..3e5654fc0 --- /dev/null +++ b/algorithms/cpp/findingTheUsersActiveMinutes/FindingTheUsersActiveMinutes.cpp @@ -0,0 +1,66 @@ +// Source : https://leetcode.com/problems/finding-the-users-active-minutes/ +// Author : Hao Chen +// Date : 2021-04-05 + +/***************************************************************************************************** + * + * 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]. + ******************************************************************************************************/ + +class Solution { +public: + vector findingUsersActiveMinutes(vector>& logs, int k) { + vector result(k, 0); + unordered_map> uam; + for (auto& log : logs) { + uam[log[0]].insert(log[1]); + } + for (auto& [id, t] : uam) { + if (t.size() <= k) { + result[t.size()-1]++; + } + } + return result; + } +};