[Twitter高频题] - Leetcode1817. Find User Active Minutes

题目链接

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);空间复杂度:O(N^{2})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值