LeetCode-1604. 警告一小时内使用相同员工卡大于等于三次的人【哈希表,排序,数组】

2023-11-16

题目描述:

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

给你字符串数组 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”]

提示:

1 <= keyName.length, keyTime.length <= 10^5
keyName.length == keyTime.length
keyTime 格式为 “HH:MM” 。
保证 [keyName[i], keyTime[i]] 形成的二元对 互不相同 。
1 <= keyName[i].length <= 10
keyName[i] 只包含小写英文字母。
https://leetcode.cn/problems/alert-using-same-key-card-three-or-more-times-in-a-one-hour-period/

解题思路一:时间转换成分钟数,直接解决跨天问题。用哈希表记录每个员工的名字以及对应的时间。然后遍历哈希表,对于每个员工,我们将该员工的所有打卡时间按照时间先后排序,然后遍历排序后的打卡时间,判断下标距离为2的两个时间是否在同一小时内,如果是,则将该员工加入答案数组。

因为是判断下标距离为2的两个时间,如果员工的打卡次数小于3,那么直接进入下层循环。(不用判断)

class Solution {
public:
    vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) {
        unordered_map<string,vector<int>> d;//记录每个人对应的时间
        int n=keyName.size();
        for(int i=0;i<n;++i){
            string name=keyName[i];
            string time=keyTime[i];
            int hour=(time[0]-'0')*10+time[1];
            int minute=(time[3]-'0')*10+time[4];
            d[name].emplace_back(hour*60+minute);
        }
        vector<string> res;//记录最终名单
        for(auto&[name,list]:d){
            sort(list.begin(),list.end());//将该员工对应的时间进行排序
            int sz=list.size();
            for(int i=2;i<sz;++i)//i从2开始进行遍历,当sz<=2时进入下轮循环,即员工在一小时时间内使用员工卡的次数小于三次
                if(list[i]-list[i-2]<=60){
                    res.emplace_back(name);
                    break;
                }
        }
        sort(res.begin(),res.end());//按 字典序升序 排序后返回
        return res;
    }
};

时间复杂度:O(nlogn)//主要是排序
空间复杂度:O(n)//哈希表

解题思路二:0


解题思路三:0


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode-1604. 警告一小时内使用相同员工卡大于等于三次的人【哈希表,排序,数组】 的相关文章

  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 为什么不能调用带有 auto& 参数的 const mutable lambda?

    include
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad

随机推荐

  • Google Earth Engine(GEE) 01-中输入提示快捷键Ctrl+space无法使用的问题

    Google Earth Engine GEE 01 中输入提示快捷键Ctrl space无法使用的问题 GEE中 Ctrl space组合键用于代码输入快捷提示 能够提高编码的准确度和速度 但是 windows系统默认Ctrl space
  • Windows下Jenkins的运行环境由Java8 升级为Java11

    开源 Devops 工具 Jenkins 在官方博客宣布 从 6 月 28 日发布的 Jenkins 2 357 和将于 9 月发布的 LTS 版本开始 Jenkins 需要 Java 11 才能使用 将放弃 Java 8 步骤 1 安装j
  • STM32CUBEMX配置教程(一)基础配置

    STM32CUBEMX配置教程 一 基础配置 基于STM32H743VI 使用STM32CUBEMX两年了 始终觉得这个工具非常的方便 但因为不是经常使用 导致有些要点总是会有些遗忘 因此写下这一系列教程以供记忆 顺便让我这个大萌新给广大小
  • c++智能指针之auto_ptr详解(有源码有实例)

    前言 内存泄漏大概是每一个c c 程序员最深恶痛绝的问题 因为大部分此类问题都是令广大c程序员很抓狂 掉头发的疑难杂症 而内存泄漏的根本原因就是指针的使用不当引起的 例如指针指向的内存没有释放 导致产生了程序无法控制的内存块 而随着程序不断
  • Pycharm连接MySQL

    使用MySQL内置工具 命令 创建数据库 unicom 数据表 admin 表名 admin 列 id 整型 自增 主键 username 字符串 不为空 password 字符串 不为空 mobile 字符串 不为空 Python代码实现
  • VC++实现视频压缩编码标准 MPEG-4

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 需要源码的请与我联系 参考书籍 lt
  • 测试人如何编写测试用例?一文从3个方面带你写一个合格的测试用例

    前言 作为一个测试新人 刚开始接触测试 对于怎么写测试用例很头疼 无法接触需求 只能根据站在用户的角度去做测试 但是这样情况会导致不能全方位的测试APP 这种情况就需要一份测试用例了 但是不会写 求指教 还有就是测试出来的bug该如何追踪
  • 访问数据库

    一 JDBC简介 JDBC时Java DataBase Connectivity的缩写 它是连接Java程序和数据库服务器的纽带 JDBC的实现封装了与各种数据库服务器通信的细节 Java程序通过JDBC API来访问数据库 有以下优点 1
  • 【leetcode刷题】最长回文子串

    题目描述 给你一个字符串 s 找到 s 中最长的回文子串 示例1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例2 输入 s cbbd 输出 bb 方法一 暴力枚举 param string s return
  • 单片机概述习题以及答案

    一 填空 除了单片机这一名称之外 单片机还可称为 或 答 微控制器 嵌入式控制器 2 单片机与普通微型计算机的不同之处在于其将 和 三部分 通过内部 连接在一起 集成于一块芯片上 答 CPU 存储器 I O 口 总线 AT89S52 单片机
  • 线性代数期末抱佛脚

    1 Row operations steps for finding solution if possible in linear systems many linear equations 求解的方法有两种 第一种 如 若要求该矩阵的解
  • LSTM对比Bi-LSTM的电力负荷时间序列预测(Matlab)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 0 概述 1 电力负荷预测 2 滑动窗输入结构的构建 3 LSTM 4 Bi LSTM 5 运行结果 6 Matla
  • jQuery MiniUI 开发教程 树形控件 树形:懒加载树(五)

    b 懒加载树 b img http www miniui com docs api images lazytree gif img 参考示例 url http www miniui com demo tree lazytree html 懒
  • C++:读写INI文件

    C 读写INI文件 INI文件是一种常见的配置文件格式 用于存储应用程序的配置信息 在C 中 我们可以使用一些库来读取和写入INI文件 在本文中 我将向您展示如何使用C 读取和写入INI文件 读取INI文件 对于INI文件的读取 我们可以使
  • Spring Data JPA 多数据源的使用

    p 项目中使用多个数据源在以往工作中比较常见 微服务架构中不建议一个项目使用多个数据源 在微服务架构下 一个微服务拥有自己独立的一个数据库 如果此微服务要使用其他数据库的数据 需要调用对应库的微服务接口来调用 而不是在一个项目中连接使用多个
  • U盘安装redhat 7.4的最终解决方案

    U盘安装redhat 7 4的最终解决方案 终于将redhat 7 4装上x3650 M5服务器了 过程无比艰辛 因为与CentOS7有一定区别 与redhat6 8完全不同 遇到的问题有 A 刻录镜像的时候只能刻录一个4MB EFI文件夹
  • 详解TCP为什么不能是两次握手

    三次握手的过程 注意不要遗漏全双工下两缓存 读 写缓存 的分配和变量的分配 CLOSED 表示初始状态 LISTEN 该状态表示服务器端的某个SOCKET处于监听状态 可以接受连接 SYN SENT 这个状态与SYN RCVD遥相呼应 当客
  • 【golang】for range中取地址操作的陷阱

    Tips for range创建了每个元素的副本 而不是直接返回每个元素的引用 例子1 package main import fmt func main slice int 0 1 2 3 myMap make map int int f
  • ZooKeeper之Java客户端API使用—创建节点。

    客户端可以通过ZooKeeper的API来创建一个数据节点 有如下两个接口 String create final String path byte data List
  • LeetCode-1604. 警告一小时内使用相同员工卡大于等于三次的人【哈希表,排序,数组】

    LeetCode 1604 警告一小时内使用相同员工卡大于等于三次的人 哈希表 排序 数组 题目描述 解题思路一 时间转换成分钟数 直接解决跨天问题 用哈希表记录每个员工的名字以及对应的时间 然后遍历哈希表 对于每个员工 我们将该员工的所有