通过率 69% · 提交 45 · 通过 31
在一个神秘的魔法世界中,巫师们依靠魔法闹钟来管理他们的日常事务。每一个闹钟都有唯一的编号,并且会在一周的特定时间自动响起提醒。 你需要帮助巫师们设计一个魔法闹钟系统,实现以下功能: 1. 初始化系统(MagicAlarmSystem) 初始化魔法闹钟系统,此操作会清空已有所有闹钟数据。该操作必须在其他操作之前执行一次,格式为:
MagicAlarmSystem2. 添加闹钟(`addAlarm`) 添加一个新的魔法闹钟。每个闹钟具有以下属性: * `id`:唯一的整数编号(1 ≤ id ≤ 1000) * ``:表示闹钟在一周中哪些天会响铃。是一个不超过7个元素的数组,每个元素是 1~7 的整数,表示周一至周日。 * `hour`:闹钟响起的小时(0 ≤ hour < 24) * `minute`:闹钟响起的分钟(0 ≤ minute < 60) * ``:闹钟类型(0 表示普通,1 表示紧急,2 表示重要) 如果已经存在相同 `id` 的闹钟,则添加失败,返回 `False`;否则成功添加,返回 `True`。 3. 删除闹钟(`deleteAlarm`) 根据闹钟的 `id` 删除对应的魔法闹钟。 如果该闹钟存在,则删除并返回 `True`;否则返回 `False`。 4. 查询闹钟(`queryAlarm`) 查询在指定时间范围内响起的所有魔法闹钟。 * 输入参数包括: * `weekday`:星期几(1 - 7) * `hour`:小时(0 ≤ hour < 24) * `startminute`:开始分钟(0 ≤ startminute < 60) * `endminute`:结束分钟(startminute ≤ endminute < 60) 查询条件:筛选出在指定 `weekday` 的 `hour` 点内、`minute` 在 `[startminute, endminute]` 范围内的闹钟。 查询结果排序规则如下: * 先按 `(hour, minute)` ; * 若时间相同,按 `typeId` 升序; * 若 `typeId` 相同,按 `id` 升序。 如果没有符合条件的闹钟,输出 `-1`。
这类题属于华为可信认证科目一方向中「可信 / 系统设计」方向的高频题型,通常考察对「可信 / 系统设计」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
Q(1 ≤ Q ≤ 1000),表示操作次数。MagicAlarmSystem:初始化系统。addAlarm(id, weekdays, hour, minute, typeId):添加一个闹钟。deleteAlarm(id):根据 id 删除一个闹钟。queryAlarm(weekday, hour, startminute, endminute):查询在某个星期几的某个小时内,指定时间段内响起的所有闹钟。对于 MagicAlarmSystem 操作:
null。对于每个查询操作 queryAlarm,输出符合条件的闹钟的编号,按照以下顺序排序:
hour, minute)从早到晚排序。typeId 从小到大排序。id 从小到大排序。对于每个 addAlarm 和 deleteAlarm 操作,输出操作结果:
True。id 已存在或不存在),输出 False。如果查询没有符合条件的闹钟,则输出 -1。
示例 1
输入示例
11 AlarmSystem addAlarm 1 3 1 3 5 7 30 0 addAlarm 2 3 2 4 6 8 15 1 addAlarm 1 3 1 2 3 9 0 2 deleteAlarm 1 deleteAlarm 3 queryAlarm 4 9 5 10 addAlarm 3 2 4 5 9 8 2 addAlarm 4 2 4 5 9 9 1 addAlarm 5 2 4 5 9 6 0 queryAlarm 4 9 5 10
输出示例
null True True False True False -1 True True True 5 3 4
AlarmSystem:
null,表示系统已成功初始化。addAlarm (id=1, weekdays=[1, 3, 5], hour=7, minute=30, typeId=0):
id=1,设置在星期一、三、五响铃,时间为 7:30,类型为 0(普通闹钟)。True。addAlarm (id=2, weekdays=[2, 4, 6], hour=8, minute=15, typeId=1):
id=2,设置在星期二、四、六响铃,时间为 8:15,类型为 1(紧急闹钟)。True。addAlarm (id=1, weekdays=[1, 2, 3], hour=9, minute=0, typeId=2):
id=1 的闹钟,但 id=1 的闹钟已经存在,因此不能添加,输出 False。deleteAlarm (id=1):
id=1 的闹钟。删除成功,输出 True。deleteAlarm (id=3):
id=3,返回 False,表示该闹钟不存在。queryAlarm (weekday=4, hour=9, startminute=5, endminute=10):
-1。addAlarm (id=3, weekdays=[4, 5], hour=9, minute=8, typeId=2):
id=3,设置在星期四和星期五响铃,时间为 9:08,类型为 2(重要闹钟)。True。addAlarm (id=4, weekdays=[4, 5], hour=9, minute=9, typeId=1):
id=4,设置在星期四和星期五响铃,时间为 9:09,类型为 1(紧急闹钟)。True。addAlarm (id=5, weekdays=[4, 5], hour=9, minute=6, typeId=0):
id=5,设置在星期四和星期五响铃,时间为 9:06,类型为 0(普通闹钟)。True。queryAlarm (weekday=4, hour=9, startminute=5, endminute=10):id=5(9:06)、id=3(9:08)和 id=4(9:09)。这些闹钟按照时间、类型和 id 排序后为 5 3 4,因此输出 5 3 4。时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有