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

发布时间 2023-06-13 16:48:21作者: zwyyy456

问题描述

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

解题思路

模拟,哈希表+排序

代码

class Solution {
  public:
    int to_min(string &s) {
        return ((s[0] - '0') * 10 + s[1] - '0') * 60 + (s[3] - '0') * 10 + s[4] - '0';
    }
    bool in_hour(vector<string> &time, int j) {
        return to_min(time[j]) - to_min(time[j - 2]) <= 60;
    }
    vector<string> alertNames(vector<string> &keyName, vector<string> &keyTime) {
        unordered_map<string, set<string>> name_time;
        vector<string> time;
        unordered_set<string> res;
        for (int i = 0; i < keyName.size(); i++) {
            name_time[keyName[i]].insert(keyTime[i]);
        }
        for (auto &iter : name_time) {
            time.assign(iter.second.begin(), iter.second.end());
            for (int j = 2; j < time.size(); j++) {
                if (in_hour(time, j)) {
                    if (res.find(iter.first) == res.end())
                        res.insert(iter.first);
                }
            }
        }
        vector<string> man(res.begin(), res.end());
        std::sort(man.begin(), man.end());
        return man;
    }
};