查找用户活跃分钟数【LC1817】
给你用户在 LeetCode 的操作日志,和一个整数
k
。日志用一个二维整数数组logs
表示,其中每个logs[i] = [IDi, timei]
表示 ID 为IDi
的用户在timei
分钟时执行了某个操作。多个用户 可以同时执行操作,单个用户可以在同一分钟内执行 多个操作 。
指定用户的 用户活跃分钟数(user active minutes,UAM) 定义为用户对 LeetCode 执行操作的 唯一分钟数 。 即使一分钟内执行多个操作,也只能按一分钟计数。
请你统计用户活跃分钟数的分布情况,统计结果是一个长度为
k
且 下标从 1 开始计数 的数组answer
,对于每个j
(1 <= j <= k
),answer[j]
表示 用户活跃分钟数 等于j
的用户数。返回上面描述的答案数组
answer
。
中等题越做越快了
-
思路:使用哈希表记录每个用户的活跃时间,那么用户活跃分钟数则为活跃时间的多少,因此哈希表的key值为用户id,value值为Set集合
-
实现
class Solution { public int[] findingUsersActiveMinutes(int[][] logs, int k) { Map<Integer,Set<Integer>> idToUAM = new HashMap<>(); int[] res = new int[k]; for (int[] l : logs){ int id = l[0], time = l[1]; var set = idToUAM.getOrDefault(id, new HashSet<Integer>()); set.add(time); idToUAM.put(id, set); // idToUAM.putIfAbsent(id, new HashSet<Integer>()); // idToUAM.get(id).add(time); } for (var value : idToUAM.values()){ res[value.size() - 1]++; } return res; } }
- 复杂度
- 时间复杂度: O ( n + k ) O(n+k) O(n+k)
- 空间复杂度: O ( n ) O(n) O(n)
- 复杂度