news 2026/5/25 21:46:35

LeetCode 3433.统计用户被提及情况:(大)模拟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 3433.统计用户被提及情况:(大)模拟

【LetMeFly】3433.统计用户被提及情况:(大)模拟

力扣题目链接:https://leetcode.cn/problems/count-mentions-per-user/

给你一个整数numberOfUsers表示用户总数,另有一个大小为n x 3的数组events

每个events[i]都属于下述两种类型之一:

  1. 消息事件(Message Event):["MESSAGE", "timestampi", "mentions_stringi"]
    <ul> <li>事件表示在&nbsp;<code>timestamp<sub>i</sub></code>&nbsp;时,一组用户被消息提及。</li> <li><code>mentions_string<sub>i</sub></code>&nbsp;字符串包含下述标识符之一: <ul> <li><code>id&lt;number&gt;</code>:其中&nbsp;<code>&lt;number&gt;</code>&nbsp;是一个区间&nbsp;<code>[0,numberOfUsers - 1]</code>&nbsp;内的整数。可以用单个空格分隔&nbsp;<strong>多个</strong> id ,并且 id 可能重复。此外,这种形式可以提及离线用户。</li> <li><code>ALL</code>:提及 <strong>所有</strong> 用户。</li> <li><code>HERE</code>:提及所有 <strong>在线</strong> 用户。</li> </ul> </li> </ul> </li> <li><strong>离线事件(Offline Event):</strong><code>["OFFLINE", "timestamp<sub>i</sub>", "id<sub>i</sub>"]</code> <ul> <li>事件表示用户&nbsp;<code>id<sub>i</sub></code>&nbsp;在&nbsp;<code>timestamp<sub>i</sub></code>&nbsp;时变为离线状态 <strong>60 个单位时间</strong>。用户会在&nbsp;<code>timestamp<sub>i</sub> + 60</code>&nbsp;时自动再次上线。</li> </ul> </li>

返回数组mentions,其中mentions[i]表示 id 为i的用户在所有MESSAGE事件中被提及的次数。

最初所有用户都处于在线状态,并且如果某个用户离线或者重新上线,其对应的状态变更将会在所有相同时间发生的消息事件之前进行处理和同步。

注意在单条消息中,同一个用户可能会被提及多次。每次提及都需要被分别统计。

示例 1:

输入:numberOfUsers = 2, events = [["MESSAGE","10","id1 id0"],["OFFLINE","11","0"],["MESSAGE","71","HERE"]]

输出:[2,2]

解释:

最初,所有用户都在线。

时间戳 10 ,id1id0被提及,mentions = [1,1]

时间戳 11 ,id0离线

时间戳 71 ,id0再次上线并且"HERE"被提及,mentions = [2,2]

示例 2:

输入:numberOfUsers = 2, events = [["MESSAGE","10","id1 id0"],["OFFLINE","11","0"],["MESSAGE","12","ALL"]]

输出:[2,2]

解释:

最初,所有用户都在线。

时间戳 10 ,id1id0被提及,mentions = [1,1]

时间戳 11 ,id0离线

时间戳 12 ,"ALL"被提及。这种方式将会包括所有离线用户,所以id0id1都被提及,mentions = [2,2]

示例 3:

输入:numberOfUsers = 2, events = [["OFFLINE","10","0"],["MESSAGE","12","HERE"]]

输出:[0,1]

解释:

最初,所有用户都在线。

时间戳 10 ,id0离线

时间戳 12 ,"HERE"被提及。由于id0仍处于离线状态,其将不会被提及,mentions = [0,1]

提示:

  • 1 <= numberOfUsers <= 100
  • 1 <= events.length <= 100
  • events[i].length == 3
  • events[i][0]的值为MESSAGEOFFLINE
  • 1 <= int(events[i][1]) <= 105
  • 在任意"MESSAGE"事件中,以id<number>形式提及的用户数目介于1100之间。
  • 0 <= <number> <= numberOfUsers - 1
  • 题目保证OFFLINE引用的用户 id 在事件发生时处于在线状态。

解题方法:模拟

最多100个人,最多100个事件,所以直接暴力模拟就好了。

创建一个答案数组,初始值全部为0,接着开始遍历事件:

  • 如果事件是OFFLINE,则什么都不做,直接continue。否则一定是消息事件:
  • 如果事件是ALL,则每人+1
  • 如果事件是HERE,则先每人+1,然后再遍历一遍事件数组,如果存在60时间内的下线时间,则此人-1
  • 否则(@指定人),被提及到的人们+1

以上。

时空复杂度分析

e = l e n ( e v e n t s ) e=len(events)e=len(events)n = n u m b e r O f U s e r s n=numberOfUsersn=numberOfUsers

  • 单次操作时间复杂度:下线O ( 1 ) O(1)O(1)、所有人O ( n ) O(n)O(n)、在线人O ( n + e ) O(n+e)O(n+e)、指定人O ( l e n ( e v e n t s [ i ] [ 2 ] ) ) O(len(events[i][2]))O(len(events[i][2]))
  • 总空间复杂度O ( n ) O(n)O(n)

AC代码

Python
''' LastEditTime: 2025-12-12 13:42:16 '''fromtypingimportListclassSolution:defcountMentions(self,numberOfUsers:int,events:List[List[str]])->List[int]:ans:List[int]=[0]*numberOfUsersforaction,time,whoinevents:ifaction=="OFFLINE":continueifwho=="ALL":ans=[x+1forxinans]elifwho=="HERE":ans=[x+1forxinans]fora,t,winevents:ifa=="OFFLINE"andint(time)-60<int(t)<=int(time):ans[int(w)]-=1else:foriin(int(w[2:])forwinwho.split(" ")):ans[i]+=1returnans# 差点忘了return

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 23:06:10

springboot基于vue的宠物用品销售信息系统供应商_7sj9505c

目录已开发项目效果实现截图开发技术核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现…

作者头像 李华
网站建设 2026/5/22 12:50:41

基于Java的膳食营养健康网站-计算机毕设项目源代码+设计说明书+PPT

膳食营养健康网站的设计与实现 摘要 随着社会的不断进步与发展&#xff0c;人们对生活质量要求逐步提升。如果开发一款膳食营养健康网站&#xff0c;可以让用户在最短的时间里享受到最好的服务&#xff1b;而开发本网站&#xff0c;又能够提高网站整体工作水平&#xff0c;简…

作者头像 李华
网站建设 2026/5/22 8:17:58

springboot基于vue的海洋工程平台设备维护网站的设计与实现_s721m876

目录已开发项目效果实现截图开发技术核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现…

作者头像 李华
网站建设 2026/5/24 15:40:12

Vue Vapor模式与AI时代前端发展的思考:虚拟DOM与框架的未来

Vue Vapor模式与AI时代前端发展的思考&#xff1a;虚拟DOM与框架的未来 1. Vue Vapor模式解析&#xff1a;传统虚拟DOM的演进 1.1 什么是Vue Vapor模式&#xff1f; Vue Vapor是Vue.js团队提出的一个实验性创新模式&#xff0c;它代表了一种绕过传统虚拟DOM的渲染方法。与基于虚…

作者头像 李华
网站建设 2026/5/22 7:46:11

12、嵌入式恒温器程序开发与调试全流程指南

嵌入式恒温器程序开发与调试全流程指南 1. 恒温器程序基础搭建 在进行实际编程时,首先要复制 measure.c 文件并将其命名为 thermostat.c 。由于 thermostat.c 已经是 measure 项目 makefile 中的依赖项,若要让其在 Eclipse 中可见,只需在项目资源管理器视图中右…

作者头像 李华
网站建设 2026/5/22 12:51:23

16、嵌入式网络编程:从线程管理到邮件通信

嵌入式网络编程:从线程管理到邮件通信 在嵌入式系统的网络编程中,线程管理和网络协议的运用至关重要。下面将详细介绍线程清理处理、HTTP协议、嵌入式Web服务器、动态Web内容、邮件通信等方面的知识。 线程清理处理 当线程终止时,需要遍历元线程列表,检查正在运行的监视…

作者头像 李华