题目链接
Leetcode 1817. : 题目描述迷惑性有点高,简单白话解释一下,题目输入是一个二维数组,每一个元素对应一个user在某分钟活跃的记录,[1,5] 就是指ID=1的用户在5分钟这个时间有活跃过。然后定义了一个名词UAM(User Active Minutes) - 是指一个用户一共在那些分钟活跃过的总和,比如用户ID=1在min=2, min=5, min=5 活跃过,那么他的UAM = 2 (重复分钟只统计一次)。然后最后问题想让你统计每一个UAM对应多少用户。
题目思路
这道题就是问题有一点绕,很明显是一道统计计数问题,通常计数问题我们会采用HashMap,我们可以建立一个hashmap来统计每一个用户 UAM, UAM计算的是不重复的活跃分钟,所以我们还需要给每一个用户建立一个HashSet进行去重添加。
整体思路:遍历数组用HashMap统计,然后遍历HashMap生成最终统计结果。代码如下:
class Solution {
public int[] findingUsersActiveMinutes(int[][] logs, int k) {
// count each user UAM
HashMap<Integer, HashSet<Integer>> u = new HashMap<>();
for(int[] log: logs) {
int id = log[0];
int min = log[1];
u.putIfAbsent(id, new HashSet<>());
u.get(id).add(min);
}
// make array to count each UAM
int[] res = new int[k];
for(int user: u.keySet()) {
int uam = u.get(user).size();
res[uam-1]++;
}
return res;
}
}
时间复杂度:O(N);空间复杂度:。