• LeedCode刷题:5516.警告一小时内使用相同员工卡


    力扣公司的员工都使用员工卡来开办公室的门。每当一个员工使用一次他的员工卡,安保系统会记录下员工的名字和使用时间。如果一个员工在一小时时间内使用员工卡的次数大于等于三次,这个系统会自动发布一个 警告 。

    给你字符串数组 keyName 和 keyTime ,其中 [keyName[i], keyTime[i]] 对应一个人的名字和他在 某一天 内使用员工卡的时间。

    使用时间的格式是 24小时制 ,形如 "HH:MM" ,比方说 "23:51" 和 "09:49" 。

    请你返回去重后的收到系统警告的员工名字,将它们按 字典序升序 排序后返回。

    请注意 "10:00" - "11:00" 视为一个小时时间范围内,而 "23:51" - "00:10" 不被视为一小时内,因为系统记录的是某一天内的使用情况。

    解题思路:

    先将名字和时间分钟数存入结构体中,再将结构体:

    将人名按字典序排序,名字相同则按时间排序,

    然后从i开始判断和i-2是否是同一个名字且 时间要小于等于60分钟,就加入结果集中

     1 class Solution {
     2 public:
     3     /* 时间转换部分 */
     4     int change_to_int(string &a){//时间转换函数 ,将字符串转化为分钟数
     5         return ((a[0]-'0')*10+a[1]-'0')*60+(a[3]-'0')*10+a[4]-'0';
     6     }
     7     /* 员工结构体部分 */
     8     struct pos{//定义一个综合结构体,包括名字和时间
     9         string name;
    10         int time;
    11     };
    12     vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) {
    13         vector<string> name;
    14         int n=keyName.size();
    15         pos d[n];
    16         /* 存入员工名和时间部分 */
    17         for(int i=0;i<n;i++){//把每个人的名字和时间以pos的结构方式都存入d[n]
    18             d[i]={
    19                 keyName[i],
    20                 change_to_int(keyTime[i])
    21             };
    22         }
    23         /* 对员工进行排序部分 */
    24         sort(d,d+n,[](pos&a,pos&b){//如果名字不同就按名字字典序排序,名字相同就按时间排序
    25             if(a.name!=b.name)
    26                 return a.name<b.name;
    27             else
    28                 return a.time<b.time;
    29         });
    30         /* 查找部分 */
    31         for(int i=2;i<n;i++){
    32             if(name.size()&&name.back()==d[i].name)
    33                 continue;
    34             if(d[i].name==d[i-2].name&&d[i].time-d[i-2].time<=60){
    35                 name.push_back(d[i].name);
    36             }
    37         }
    38         return name;
    39     }
    40 };
  • 相关阅读:
    首先,编写一个类ChongZai,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai类的功能。
    创建一个Point类,有成员变量x,y,方法getX(),setX(),还有一个构造方 法初始化x和y。创建类主类A来测试它。
    机动车
    people 0919
    创建一个三角形类,成员变量三边,方法求周长,创建类主类A来测试它。
    百鸡百钱修改
    java 面向对象--------时间作业
    序列化、反序列化
    通讯录
    Java正则表达式
  • 原文地址:https://www.cnblogs.com/nilbook/p/13767354.html
Copyright © 2020-2023  润新知