【每日一题Day93】LC1817查找用户活跃分钟数 | 哈希表

查找用户活跃分钟数【LC1817】

给你用户在 LeetCode 的操作日志,和一个整数 k 。日志用一个二维整数数组 logs 表示,其中每个 logs[i] = [IDi, timei] 表示 ID 为 IDi 的用户在 timei 分钟时执行了某个操作。

多个用户 可以同时执行操作,单个用户可以在同一分钟内执行 多个操作

指定用户的 用户活跃分钟数(user active minutes,UAM) 定义为用户对 LeetCode 执行操作的 唯一分钟数 。 即使一分钟内执行多个操作,也只能按一分钟计数。

请你统计用户活跃分钟数的分布情况,统计结果是一个长度为 k下标从 1 开始计数 的数组 answer ,对于每个 j1 <= 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值