2026/2/8 15:09:07
网站建设
项目流程
安徽住房和城乡建设部网站,建立大安全大应急框架,哪里做公司网站,辽宁省档案网站建设【LetMeFly】3433.统计用户被提及情况#xff1a;#xff08;大#xff09;模拟
力扣题目链接#xff1a;https://leetcode.cn/problems/count-mentions-per-user/
给你一个整数 numberOfUsers 表示用户总数#xff0c;另有一个大小为 n x 3 的数组 events 。
每个 eve…【LetMeFly】3433.统计用户被提及情况大模拟力扣题目链接https://leetcode.cn/problems/count-mentions-per-user/给你一个整数numberOfUsers表示用户总数另有一个大小为n x 3的数组events。每个events[i]都属于下述两种类型之一消息事件Message Event[MESSAGE, timestampi, mentions_stringi]ul li事件表示在nbsp;codetimestampsubi/sub/codenbsp;时一组用户被消息提及。/li licodementions_stringsubi/sub/codenbsp;字符串包含下述标识符之一 ul licodeidlt;numbergt;/code其中nbsp;codelt;numbergt;/codenbsp;是一个区间nbsp;code[0,numberOfUsers - 1]/codenbsp;内的整数。可以用单个空格分隔nbsp;strong多个/strong id 并且 id 可能重复。此外这种形式可以提及离线用户。/li licodeALL/code提及 strong所有/strong 用户。/li licodeHERE/code提及所有 strong在线/strong 用户。/li /ul /li /ul /li listrong离线事件Offline Event/strongcode[OFFLINE, timestampsubi/sub, idsubi/sub]/code ul li事件表示用户nbsp;codeidsubi/sub/codenbsp;在nbsp;codetimestampsubi/sub/codenbsp;时变为离线状态 strong60 个单位时间/strong。用户会在nbsp;codetimestampsubi/sub 60/codenbsp;时自动再次上线。/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 id1和id0被提及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 id1和id0被提及mentions [1,1]时间戳 11 id0离线。时间戳 12 ALL被提及。这种方式将会包括所有离线用户所以id0和id1都被提及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 1001 events.length 100events[i].length 3events[i][0]的值为MESSAGE或OFFLINE。1 int(events[i][1]) 105在任意MESSAGE事件中以idnumber形式提及的用户数目介于1和100之间。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 ) elen(events)elen(events)n n u m b e r O f U s e r s nnumberOfUsersnnumberOfUsers单次操作时间复杂度下线O ( 1 ) O(1)O(1)、所有人O ( n ) O(n)O(n)、在线人O ( n e ) O(ne)O(ne)、指定人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:ifactionOFFLINE:continueifwhoALL:ans[x1forxinans]elifwhoHERE:ans[x1forxinans]fora,t,winevents:ifaOFFLINEandint(time)-60int(t)int(time):ans[int(w)]-1else:foriin(int(w[2:])forwinwho.split( )):ans[i]1returnans# 差点忘了return同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源