华为OD机试真题 新系统 - 计费时段计算 (JavaPyCC++JsGo)

2 阅读2分钟

计费时段计算

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

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

题目描述

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

第一档:用电时间在每天的12:0012:00-13:3013:3017:3017:30-18:0018:00

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

第三档:其他时段

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

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

输入描述

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

约束

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

输出描述

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

示例1

输入

8:00 23:30

输出

[120,600,210]

说明

  • 第一档:12:0012:00-13:3013:3017:3017:30-18:0018:00,共120120分钟
  • 第二档:8:008:00-12:0012:0013:3013:30-17:3017:3018:0018:00-20:0020:00,共600600分钟,达到1010小时上限。其余的时间要归到第三档
  • 第三档:20:0020:00-23:3023:30,共210210分钟

示例2

输入

13:00 17:45

输出

[45,240,0]

说明

  • 第一档:13:0013:00-13:3013:3017:3017:30-17:4517:45,共4545分钟
  • 第二档:13:3013:30-17:3017:30,共240240分钟
  • 第三档:由于第二档还没达到1010小时,第三档时间为00

解题思路

核心思想

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

复杂度分析

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