All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1801_1900.s1817_finding_the_users_active_minutes.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1801_1900.s1817_finding_the_users_active_minutes;

// #Medium #Array #Hash_Table #2022_05_03_Time_16_ms_(91.64%)_Space_121.1_MB_(48.79%)

import java.util.Arrays;
import java.util.Comparator;

/**
 * 1817 - Finding the Users Active Minutes\.
 *
 * Medium
 *
 * 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 <= 104
 * *   0 <= IDi <= 109
 * *   1 <= timei <= 105
 * *   `k` is in the range [The maximum **UAM** for a user, 105].
**/
public class Solution {
    public int[] findingUsersActiveMinutes(int[][] logs, int k) {
        if (logs.length == 1) {
            int[] res = new int[k];
            res[0] = 1;
            return res;
        }
        Arrays.sort(logs, Comparator.comparingInt((int[] a) -> a[0]).thenComparingInt(a -> a[1]));
        int[] result = new int[k];
        int start = 1;
        int prevUser = logs[0][0];
        int prevMin = logs[0][1];
        int count = 1;
        while (true) {
            while (start < logs.length && prevUser == logs[start][0]) {
                if (prevMin != logs[start][1]) {
                    count++;
                }
                prevMin = logs[start][1];
                start++;
            }
            result[count - 1]++;
            if (start >= logs.length) {
                break;
            }
            count = 1;
            prevUser = logs[start][0];
            prevMin = logs[start][1];
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy