计费时段计算

2026 华为OD机试真题 4月22日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

电力公司的电费根据用电的时间,采用三挡计费:

第一档:用电时间在每天的$12:00$-$13:30$和$17:30$-$18:00$

第二档:每天从$0:00$起的,且不在第一档时段内的,累积的$10$小时

第三档:其他时段

某设备每天开关机一次($0:00$之前必然关机)。统计这台设备每天各个时段的开机时长,用分钟表示。

时间格式:$HH:MM$,$24$小时制 说明:小时不足两位不补零,分钟严格保持两位。例如:$8:08$

输入描述

"$HH:MM$ $HH:MM$",两个时间分别为设备开机时间、设备关机时间,中间空格间隔。例如:"$8:00$ $23:30$"。

约束

  1. 结束时间不超过$0:00$(最大为$23:59$),即不考虑跨天的情况。
  2. 如果开机时间跟关机时间相等,则认为是开机$0$分钟。例如:"$8:00$ $8:00$"

输出描述

整数数组,依次为第一、二、三档的时长,单位:分钟。例如:$[120,600,210]$

示例1

输入

8:00 23:30

输出

[120,600,210]

说明

  • 第一档:$12:00$-$13:30$、$17:30$-$18:00$,共$120$分钟
  • 第二档:$8:00$-$12:00$、$13:30$-$17:30$、$18:00$-$20:00$,共$600$分钟,达到$10$小时上限。其余的时间要归到第三档
  • 第三档:$20:00$-$23:30$,共$210$分钟

示例2

输入

13:00 17:45

输出

[45,240,0]

说明

  • 第一档:$13:00$-$13:30$、$17:30$-$17:45$,共$45$分钟
  • 第二档:$13:30$-$17:30$,共$240$分钟
  • 第三档:由于第二档还没达到$10$小时,第三档时间为$0$

解题思路

核心思想

  1. 时间转换:将所有输入的时间格式(HH:MM)转换为从当天 $0:00$ 开始的总分钟数,方便计算。
  2. 档位规则
    • 第一档:固定时段 $12:00$-$13:30$($720$-$810$ 分钟)和 $17:30$-$18:00$($1050$-$1080$ 分钟)。
    • 第二档:非第一档时段内的开机时间,每天累积上限为 $10$ 小时($600$ 分钟)。
    • 第三档:超过第二档上限后的所有其他开机时间。
  3. 模拟计算:从开机时间遍历到关机时间,每一分钟判断其属于哪一档:
    • 如果当前分钟在第一档时段内,计入第一档。
    • 如果不在第一档时段:
      • 如果已计入第二档的时间未满 $600$ 分钟,计入第二档。
      • 否则,计入第三档。
  4. 输出结果:以数组形式输出三个档位的总时长。

复杂度分析

  • 时间复杂度:$O(L)$,其中 $L$ 是开关机之间的时间跨度(分钟)。由于一天最多只有 $1440$ 分钟,因此计算非常高效。
  • 空间复杂度:$O(1)$,只需要常数级别的变量来存储各档位的时间。
THE END