华为OD统一考试 - 考勤信息
题目描述
公司用一个字符串来表示员工的出勤信息
- absent:缺勤
- late:迟到
- leaveearly:早退
- present:正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:
- 缺勤不超过一次;
- 没有连续的迟到/早退;
- 任意连续7次考勤,缺勤/迟到/早退不超过3次。
输入描述
用户的考勤数据字符串
- 记录条数 >= 1;
- 输入字符串长度 < 10000;
- 不存在非法输入;
如:
2
present
present absent present present leaveearly present absent
输出描述
根据考勤数据字符串,如果能得到考勤奖,输出”true”;否则输出”false”,
对于输入示例的结果应为:
true false
用例
输入 |
2 present present present |
输出 |
true true |
说明 |
无 |
输入 |
2 present present absent present present leaveearly present absent |
输出 |
true false |
说明 |
无 |
题目解析
本题需要注意下
没有连续的迟到/早退;
根据考友反馈,连续的迟到/早退,应该指:本次是迟到或早退,上次也是迟到或早退。
比如,本次是迟到,上次是早退,则也算是:连续的迟到/早退
本题主要难点在于如果统计”任意连续7次考勤“中的缺勤/迟到/早退次数。
这里我们可以使用滑动窗口,且滑窗窗口的长度最大为7
- 当滑窗右边界索引R < 7 时,则滑窗长度 = R + 1
- 当滑窗右边界索引R >= 7时,则滑窗长度 = 7,同时能推导出滑窗左边界索引L为 = R - 6
如下图所示

我们只要计算出滑窗内部 present 次数,即可通过:
任意连续7次考勤中的缺勤+迟到+早退次数 是否大于3
import Foundation func ODTest_
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024华为OD机试卷题 文章被收录于专栏
本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。
查看11道真题和解析