1604. 警告一小时内使用相同员工卡大于等于三次的人

发布时间 2023-04-07 19:50:49作者: lxy_cn

题目链接:1604. 警告一小时内使用相同员工卡大于等于三次的人

方法:模拟

解题思路

先对数据进行处理,根据 \(name\) 将其时间存储在哈希表中,对哈兮表进行遍历,每个 \(name\) 对应一个时间序列,首先对时间序列进行从小到大排序,从 \(i = 2\) 开始遍历该序列,若存在 \(list[i - 2] + 60 >= list[i]\),则发送警告,即将该 \(name\) 存储起来。最后对答案数组进行字母序排序。

代码

class Solution {
public:
    vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) {
        int n = keyName.size();
        unordered_map<string, vector<int>> timeMap;
        for(int i = 0; i < n; i ++ ) {
            string name = keyName[i];
            string time = keyTime[i];
            int hour = (time[0] - '0') * 10 + (time[1] - '0');
            int minute =  (time[3] - '0') * 10 + (time[4] - '0');
            timeMap[name].emplace_back(hour * 60 + minute);
        }
        vector<string> ans;
        for (auto &[name, list] : timeMap) {
            sort(list.begin(), list.end());
            for (int i = 2; i < list.size(); i ++ ) {
                if (list[i - 2] + 60 >= list[i]) {
                    ans.emplace_back(name);
                    break;
                }
            }
        }
        sort(ans.begin(), ans.end());
        return ans;
    }
};

复杂度分析

时间复杂度:\(O(n*logn)\)
空间复杂度:\(O(n)\)