leetcode1817. 查找用户活跃分钟数

该博客介绍了LeetCode第1817题的解题思路,重点是通过哈希表来统计用户在不同分钟的活跃情况。用户活跃分钟数定义为用户执行操作的唯一分钟数,即使一分钟内有多个操作也只算作一分钟。博客提供了一个使用哈希表和向量的方法,首先对操作时间进行排序,然后在遍历过程中利用哈希表记录并更新活跃分钟数,最终得到结果数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://leetcode-cn.com/problems/finding-the-users-active-minutes/

题意:给你用户在 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 。

 方法:哈希表+向量,先排序,然后利用哈希表的性质存储time,每一轮用户更新的时候重置哈希表

bool cmp(vector<int> &a,vector<int> &b)//排序函数,把用户id小的放到前面,如果用户id一样,把time小的放在前面
{
    if(a[0]==b[0]) return a[1]<b[1];
    else return a[0]<b[0];
}
class Solution {
public:
    vector<int> findingUsersActiveMinutes(vector<vector<int>>& logs, int k) {
        sort(logs.begin(),logs.end(),cmp);//先对logs进行排序
        vector<int> ret(k,0);//返回向量
        int pre = logs[0][0];//记录前一个用户的id
        unordered_map<int,int> mp;//存储每个用户活跃时间的哈希表
        for(int i=0;i<logs.size();i++)
        {
            if(pre!=logs[i][0])//如果用户的id与上一轮的不一致,就更新返回向量,并且把哈希表清空,用来储存这一轮用户的活跃时间
            {
                ret[mp.size()-1]++;//在对应的返回向量的时间点把上一个用户的不同time的数目加上去
                mp.clear();//清空哈希表
            } 
            mp[logs[i][1]]++;//哈希表key值为time的value自加
            pre = logs[i][0];//更新pre的值,pre是这一轮用户的id
        }
        ret[mp.size()-1]++;//最后一次的返回向量要记得更新
        return ret;
    }
};

leetcode题解地址:https://leetcode-cn.com/problems/finding-the-users-active-minutes/solution/ha-xi-biao-by-yuan-feng-cai-chen-1-8pds/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值