leetcode 3433

3433: 统计用户被提及情况

思路:排序+模拟

注意输入的 events 不保证是按时间顺序发生的,需要先排序。

按照时间戳 timestamp 从小到大排序,时间戳相同的,离线事件排在前面,因为题目要求「++状态变更++在所有相同时间发生的消息事件之前处理」。

然后模拟:

  • 离线事件:用一个数组 onlineT 记录用户下次在线的时间戳(60 秒后)。如果当前时间戳>= onlineT[i],则表示用户 i 已在线。

  • 消息事件:把相应用户的提及次数加一。

    string& mention = e[2];

复制代码
else{ // @id
    int idx=0;
    for(int i=0;i<mention.size();i++){
        if(isdigit(mention[i])) idx=idx*10+(mention[i]-'0');
        if(i+1==mention.size() || mention[i+1]==' '){
            ans[idx]++;
            idx=0;
        }
    }
}
  • isdigit(mention[i]) 是判断字符串 mentioni 个字符是不是 十进制数字字符'0'--'9'

  • 1 <= numberOfUsers <= 100 因此要考虑可能出现形似id12 的情况idx=idx*10+(mention[i]-'0')

    class Solution {
    public:
    vector<int> countMentions(int numberOfUsers, vector<vector<string>>& events) {
    vector<int> ans(numberOfUsers);
    vector<int> online_t(numberOfUsers,0);
    // 按照时间戳从小到大排序,时间戳相同的,离线事件排在前面
    //两两比较,["MESSAGE","10","id1 id0"],["OFFLINE","11","0"]
    auto cmp=[](const vector<string>& lth,const vector<string>& rth){
    int lth_tsp=stoi(lth[1]); //stoi适用于string转int
    int rth_tsp=stoi(rth[1]);
    if(lth_tsp!=rth_tsp) return lth_tsp<rth_tsp;
    else return lth[0]>rth[0]; // "OFFLINE" > "MESSAGE" 字典序
    };
    sort(events.begin(),events.end(),cmp);
    for(auto& e:events){
    int curr_t=stoi(e[1]); // 当前时间
    string& mention=e[2];
    if(e[0][0]=='O'){ //离线事件
    online_t[stoi(mention)]=curr_t+60; // 下次在线时间
    }
    //消息事件
    else if(mention[0]=='A'){ // @所有人
    for(int i=0;i<numberOfUsers;i++) ans[i]++;
    }
    else if(mention[0]=='H'){ // @所有在线用户
    for(int i=0;i<numberOfUsers;i++){
    if(curr_t>=online_t[i]) ans[i]++;
    }
    }
    else{ // @id
    int idx=0;
    for(int i=0;i<mention.size();i++){
    if(isdigit(mention[i])) idx=idx*10+(mention[i]-'0');
    if(i+1==mention.size() || mention[i+1]==' '){
    ans[idx]++;
    idx=0;
    }
    }
    }
    }

    复制代码
          return ans;
      }

    };

相关推荐
生成论实验室6 分钟前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》第一章 源:不可言说的生成之源
人工智能·科技·算法·生活·创业创新
2zcode31 分钟前
基于低光照增强与轻量型CNN道路实时识别算法研究(UI界面+数据集+训练代码)
人工智能·算法·cnn·低光照增强·自动驾驶技术
hnjzsyjyj42 分钟前
洛谷 P1443:马的遍历 ← BFS
数据结构·bfs
小雅痞1 小时前
[Java][Leetcode middle] 209. 长度最小的子数组
java·算法·leetcode
做时间的朋友。1 小时前
精准核酸检测
java·数据结构·算法
冯诺依曼的锦鲤1 小时前
从零实现高并发内存池:TCMalloc 核心架构拆解
c++·学习·算法·架构
Thomas_Lee_OR1 小时前
多Agent路径规划 LaCAM for multi-agent path finding (MAPF)
算法·路径规划·仓储机器人·mapf
如君愿1 小时前
考研复习 Day28 | 习题--计算机网络第四章(网络层 中)、数据结构(树与二叉树 下)
数据结构·计算机网络·考研·课后习题·记录考研
一切皆是因缘际会1 小时前
可落地数字生命工程:从记忆厮杀到自我意识觉醒全链路,AGI内生智能硅基生命心智建模
人工智能·深度学习·算法·机器学习·ai·系统架构·agi
nlpming2 小时前
opencode Agent 详解
算法