【教3妹学编程-算法题】高访问员工
  96AOqGW9dKgh 2023年12月08日 21 0


【教3妹学编程-算法题】高访问员工_时间段

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

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

题目:

给你一个长度为 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’ 组成。

思路:

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

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

java代码:

class Solution {
    public List<String> findHighAccessEmployees(List<List<String>> accessTimes) {
        Map<String, List<Integer>> 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<String> ans = new ArrayList<>();
        for (var entry : groups.entrySet()) {
            List<Integer> 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;
    }
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

推荐阅读
96AOqGW9dKgh