leetcode 1817. 查找用户活跃分钟数【python3,哈希表的实现思路详解】
创始人
2024-05-14 16:37:02
0

题目

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

示例

  • 输入:logs = [[0,5],[1,2],[0,2],[0,5],[1,3]], k = 5
  • 输出:[0,2,0,0,0]
  • 解释:ID=0 的用户执行操作的分钟分别是:5 、2 和 5 。因此,该用户的用户活跃分钟数为 2(分钟 5 只计数一次)ID=1 的用户执行操作的分钟分别是:2 和 3 。因此,该用户的用户活跃分钟数为 22 个用户的用户活跃分钟数都是 2 ,answer[2] 为 2 ,其余 answer[j] 的值都是 0

题解

这个题目其实很简单就是题解读了半天,感觉出题人需要提高表述水平。题目很简单很给了一个logs日志,该列表中每一个元素均有两个值,第一个表示ID,第二个表示时间。用户活跃分钟数表示一个用户操作的时间数,这个需要去重,因此考虑使用集合。最后需要根据给定的k,求出用户活跃分钟数等于1到k的ID数,这又需要一个哈希表来表示key为统计的个数,value为用户数。

下面根据题意来进行实现,首先需要计算每个用户的 用户活跃分钟数。然后构建一个如下的哈希表:
image.png

接下来需要统计每个用户活跃分钟数的用户数,这需要根据上面的hash表计算每个集合的长度,然后以这个长度为key,以id的个数为value再构建一个哈希表。
image.png

最后直接根据这个哈希表与1到k进行匹配,没有的为0有的直接添加到列表即可。
代码如下:

class Solution:def findingUsersActiveMinutes(self, logs: List[List[int]], k: int) -> List[int]:log_dic={}for item in logs:id=item[0]time=item[1]curr_set=log_dic.get(id,set())curr_set.add(time)log_dic[id]=curr_setcount_dic={}for key in log_dic:set_num=len(log_dic[key])count_dic[set_num]=count_dic.get(set_num,0)+1result=[]for j in range(1,k+1):result.append(count_dic.get(j,0))return result

计算复杂度

  • 时间复杂度。两个哈希表的构建用时最长为O(n)O(n)O(n),遍历1到k的复杂度为O(k)O(k)O(k),因此总的时间复杂度为O(n+k)O(n+k)O(n+k)。
  • 空间复杂度。两个哈希表的存储长度为O(2n)O(2n)O(2n),记为O(n)O(n)O(n),返回结果的列表不计,总的空间复杂度为O(n)O(n)O(n)。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...