编程题目--map
作者:互联网
1604. 警告一小时内使用相同员工卡大于等于三次的人
力扣公司的员工都使用员工卡来开办公室的门。每当一个员工使用一次他的员工卡,安保系统会记录下员工的名字和使用时间。如果一个员工在一小时时间内使用员工卡的次数大于等于三次,这个系统会自动发布一个 警告 。给你字符串数组 keyName
和 keyTime
,其中 [keyName[i], keyTime[i]]
对应一个人的名字和他在 某一天 内使用员工卡的时间。
使用时间的格式是 24小时制 ,形如 "HH:MM" ,比方说 "23:51"
和 "09:49"
。
请你返回去重后的收到系统警告的员工名字,将它们按 字典序升序 排序后返回。
请注意 "10:00"
- "11:00"
视为一个小时时间范围内,而 "23:51"
- "00:10"
不被视为一小时内,因为系统记录的是某一天内的使用情况。
示例 1:
输入:keyName = ["daniel","daniel","daniel","luis","luis","luis","luis"], keyTime = ["10:00","10:40","11:00","09:00","11:00","13:00","15:00"] 输出:["daniel"] 解释:"daniel" 在一小时内使用了 3 次员工卡("10:00","10:40","11:00")。
示例 2:
输入:keyName = ["alice","alice","alice","bob","bob","bob","bob"], keyTime = ["12:01","12:00","18:00","21:00","21:20","21:30","23:00"] 输出:["bob"] 解释:"bob" 在一小时内使用了 3 次员工卡("21:00","21:20","21:30")。
示例 3:
输入:keyName = ["john","john","john"], keyTime = ["23:58","23:59","00:01"] 输出:[]
示例 4:
输入:keyName = ["leslie","leslie","leslie","clare","clare","clare","clare"], keyTime = ["13:00","13:20","14:00","18:00","18:51","19:30","19:49"] 输出:["clare","leslie"]
class Solution { map<string, vector<int>> map1; public: void update_map(string s, int minute) { if (map1.find(s) != map1.end()) { map1[s].push_back(minute); } else { vector<int> vec1; vec1.push_back(minute); map1.insert(pair<string, vector<int>>(s, vec1)); } } bool check(vector<int> & s) { sort(s.begin(),s.end()); int size = s.size(); if (size < 3) return false; for (int i = 0; i < size - 2; ++i) { if (s[i + 2] - s[i] <= 60) { return true; } } return false; } vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) { int size = keyName.size(); vector<string> result; for (int i = 0; i < size; ++i) { int hour = 0; int minute = 0; stringstream ss; ss << keyTime[i].substr(0,2); ss >> hour; ss.clear(); ss << keyTime[i].substr(3,2); ss >> minute; minute += hour * 60; update_map(keyName[i], minute); } for (auto & c : map1) { if (check(c.second)) { result.push_back(c.first); } } return result; } };
class Solution { map<string, vector<int>> map1; public: bool check(vector<int> & s) { sort(s.begin(),s.end()); int size = s.size(); if (size < 3) return false; for (int i = 0; i < size - 2; ++i) { if (s[i + 2] - s[i] <= 60) { return true; } } return false; } vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) { int size = keyName.size(); vector<string> result; for (int i = 0; i < size; ++i) { string hour = keyTime[i].substr(0, 2); string min = keyTime[i].substr(3, 2); int time = stoi(hour) * 60 + stoi(min); map1[keyName[i]].push_back(time); } for (auto && [name, time] : map1) { if (check(time)) { result.push_back(name); } } return result; } };
标签:map,00,vector,--,编程,int,keyName,keyTime,size 来源: https://www.cnblogs.com/aaronwell/p/15327425.html