• 【教3妹学编程-算法题】高访问员工


    加油

    2哥 : 3妹,今天周五怎么还下班这么晚啊?这么晚了才回来
    3妹:项目快上线了, 最近事情比较多,再累也要干, 撸起袖子加油干!
    2哥 : 辛苦辛苦, 哎,你看到王自如格力那个采访了吗?最近挺火的🔥。
    3妹:看了, 不过不作评价。 学不来呀学不来
    2哥 : 网上褒贬不一, 有的说是在溜须拍马, 有的说他很懂职场生存之道。
    3妹:2哥,你说职场中员工和老板到底是什么关系?对立关系吗,还是说可以是朋友、师生?
    2哥:都有可能,最重要的是心态要好。
    3妹:有的人java好,有的人python好,而我不一样,我心态好。嘿嘿。
    2哥:说到员工, 今天看到了一个关于员工的题目,我们来做一下吧~

    心态好

    题目:

    给你一个长度为 n 、下标从 0 开始的二维字符串数组 access_times 。对于每个 i(0 <= i <= n - 1 ),access_times[i][0] 表示某位员工的姓名,access_times[i][1] 表示该员工的访问时间。access_times 中的所有条目都发生在同一天内。

    访问时间用 四位 数字表示, 符合 24 小时制 ,例如 “0800” 或 “2250” 。

    如果员工在 同一小时内 访问系统 三次或更多 ,则称其为 高访问 员工。

    时间间隔正好相差一小时的时间 不 被视为同一小时内。例如,“0815” 和 “0915” 不属于同一小时内。

    一天开始和结束时的访问时间不被计算为同一小时内。例如,“0005” 和 “2350” 不属于同一小时内。

    以列表形式,按任意顺序,返回所有 高访问 员工的姓名。

    示例 1:

    输入:access_times = [[“a”,“0549”],[“b”,“0457”],[“a”,“0532”],[“a”,“0621”],[“b”,“0540”]]
    输出:[“a”]
    解释:“a” 在时间段 [05:32, 06:31] 内有三条访问记录,时间分别为 05:32 、05:49 和 06:21 。
    但是 “b” 的访问记录只有两条。
    因此,答案是 [“a”] 。
    示例 2:

    输入:access_times = [[“d”,“0002”],[“c”,“0808”],[“c”,“0829”],[“e”,“0215”],[“d”,“1508”],[“d”,“1444”],[“d”,“1410”],[“c”,“0809”]]
    输出:[“c”,“d”]
    解释:“c” 在时间段 [08:08, 09:07] 内有三条访问记录,时间分别为 08:08 、08:09 和 08:29 。
    “d” 在时间段 [14:10, 15:09] 内有三条访问记录,时间分别为 14:10 、14:44 和 15:08 。
    然而,“e” 只有一条访问记录,因此不能包含在答案中,最终答案是 [“c”,“d”] 。
    示例 3:

    输入:access_times = [[“cd”,“1025”],[“ab”,“1025”],[“cd”,“1046”],[“cd”,“1055”],[“ab”,“1124”],[“ab”,“1120”]]
    输出:[“ab”,“cd”]
    解释:"ab"在时间段 [10:25, 11:24] 内有三条访问记录,时间分别为 10:25 、11:20 和 11:24 。
    “cd” 在时间段 [10:25, 11:24] 内有三条访问记录,时间分别为 10:25 、10:46 和 10:55 。
    因此,答案是 [“ab”,“cd”] 。

    提示:

    1 <= access_times.length <= 100
    access_times[i].length == 2
    1 <= access_times[i][0].length <= 10
    access_times[i][0] 仅由小写英文字母组成。
    access_times[i][1].length == 4
    access_times[i][1] 采用24小时制表示时间。
    access_times[i][1] 仅由数字 ‘0’ 到 ‘9’ 组成。

    思路:

    思考

    分组+排序,
    把名字相同的员工对应的访问时间(转成分钟数)分到同一组中。
    对于每一组的访问时间 a,排序后,判断是否有 a[i]−a[i−2]<60,如果有,那么把这一组的员工名字加到答案中。

    java代码:

    class Solution {
        public List findHighAccessEmployees(List> accessTimes) {
            Map> groups = new HashMap<>();
            for (var entry : accessTimes) {
                String name = entry.get(0), s = entry.get(1);
                int t = Integer.parseInt(s.substring(0, 2)) * 60 + Integer.parseInt(s.substring(2));
                groups.computeIfAbsent(name, k -> new ArrayList<>()).add(t);
            }
    
            List ans = new ArrayList<>();
            for (var entry : groups.entrySet()) {
                List a = entry.getValue();
                Collections.sort(a);
                for (int i = 2; i < a.size(); i++) {
                    if (a.get(i) - a.get(i - 2) < 60) {
                        ans.add(entry.getKey());
                        break;
                    }
                }
            }
            return ans;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    【ML01】Linear Regression with One Variable
    hexo建站新手入门
    《MATLAB 神经网络43个案例分析》:第34章 广义神经网络的聚类算法——网络入侵聚类
    Julia编程基础
    【Vue.js 3.0源码】KeepAlive 组件:如何让组件在内存中缓存和调度?
    Linux下 Apache 配置 SSL 支持 https
    【题解】二分答案+贪心-2
    ruoyi实现富文本生成网页功能,vue实现wangEditro功能,网页静态化,二维码预览网页
    2核2G3M带宽云服务器99元(续费同价),阿里云老用户可买!
    【1++的C++进阶】之智能指针
  • 原文地址:https://blog.csdn.net/kangbin825/article/details/134472017