华为OD机考双机位C卷 - 手机App防沉迷系统 (Java & Python & JS & GO & C++ & C)

手机App防沉迷系统

2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷

华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

题目描述

智能手机方便了我们生活的同时,也侵占了我们不少的时间。“手机App防沉迷系统”能够让我们每天合理地规划手机App使用时间,在正确的时间做正确的事。

它的大概原理是这样的:

  1. 在一天24小时内,可以注册每个App的允许使用时段

  2. 一个时间段只能使用一个App

  3. App有优先级,数值越高,优先级越高。注册使用时段时,如果高优先级的App时间和低优先级的时段有冲突,则系统会自动注销低优先级的时段,如果App的优先级相同,则后添加的App不能注册。

请编程实现,根据输入数据注册App,并根据输入的时间点,返回时间点使用的App名称,如果该时间点没有注册任何App,请返回字符串“NA”。

输入描述

第一行表示注册的App数量 N(N ≤ 100)

第二部分包括 N 行,每行表示一条App注册数据

最后一行输入一个时间点,程序即返回该时间点使用的App

2
App1 1 09:00 10:00
App2 2 11:00 11:30
09:30

数据说明如下:

  1. N行注册数据以空格分隔,四项数依次表示:App名称、优先级、起始时间、结束时间

  2. 优先级1~5,数字越大,优先级越高

  3. 时间格式 HH:MM,小时和分钟都是两位,不足两位前面补0

  4. 起始时间需小于结束时间,否则注册不上

  5. 注册信息中的时间段包含起始时间点,不包含结束时间点

输出描述

输出一个字符串,表示App名称,或NA表示空闲时间

示例1

输入

1
App1 1 09:00 10:00
09:30

输出

App1

说明

App1注册在9点到10点间,9点半可用的应用名是App1

示例2

输入

2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20

输出

App2

说明

APP1和App2的时段有冲突,App2优先级高,注册App2之后,App1自动注销,因此输出App2。

示例3

输入

2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:50

输出

NA

说明

解题思路

本题的核心是带优先级的区间调度问题。我们需要管理一组时间段,确保在任意时刻只有一个 App 处于活跃状态,且遵循“高优先级抢占,同/低优先级被拒”的原则。

1. 时间处理

为了方便计算和比较,首先将所有的时间点(HH:MM)转换为以“分钟”为单位的整数(例如 09:00 -> 540)。这样区间的比较就变成了简单的整数比较。

2. 注册与冲突解决

我们需要维护一个“已注册 App 列表”。对于每一个试图注册的新 App:

  1. 冲突检测:遍历当前已注册的所有 App,判断新 App 的时间段是否与它们有重叠。重叠的条件是:max(新开始, 旧开始) < min(新结束, 旧结束)
  2. 优先级比较
    • 如果新 App 优先级 > 旧 App 优先级:说明新 App 应当抢占该时间段,因此将旧 App 注销(从已注册列表中移除)。
    • 如果新 App 优先级 ≤ 旧 App 优先级:说明新 App 无法抢占,旧 App 保留。
  3. 添加策略
    • 经过上述冲突处理(可能移除了一些低优先级的旧 App)后,将新 App 加入已注册列表。
    • :在某些代码实现中,即使新 App 优先级较低且有冲突,可能也会被加入列表。但由于列表通常保持了添加顺序或特定顺序,且查询时只要找到第一个匹配项就返回,因此存在的“高优先级”旧 App 会自然地屏蔽掉“低优先级”新 App 的查询结果,从而达成题目要求。

3. 查询结果

针对给定的查询时间点:

  • 遍历最终的已注册 App 列表。
  • 检查该时间点是否落在某个 App 的 [开始时间, 结束时间) 区间内。
  • 由于题目保证了(或通过逻辑实现了)同一时刻的高优先级覆盖,找到的第一个匹配项即为结果。
  • 如果没有匹配项,输出 "NA"。
posted @ 2026-03-10 12:18  华为od算法大师  阅读(1)  评论(0)    收藏  举报