编程题目--map

2021/9/23 22:12:37

本文主要是介绍编程题目--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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程