**设计能量管理系统**

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

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

题目描述

设计一个能量管理系统,用于管理多种能源的生产、消耗。系统支持以下功能:

支持添加能源生产与消耗记录;

每条记录对应一个版本号(第 1 条为版本 1,依次递增);

查询指定版本号之前,指定时间段的净能量;

时间重叠按时间交集长度 / 时段总时长进行比例加权。

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

输入描述

函数输入为字符串数组(长度不超过 1000),字符串组会以一条查询命令结尾,函数返回净能量结果。

输入均为合法数据,能量类型字段不做校验,生产量、消耗量均为 32 位整型数据。 全量查询 版本号输入 A。

所有时间戳以秒为单位,为 Unix 时间戳。

版本号从 1 开始递增。

  1. 生产记录(可以有多条):字符串以AddProductionRecord 开头 表示生产记录,共计 4 个参数,每个参数通过 , 分隔,参数 1 表示能量类型 (wind,solar,grid) ,参数 2 表示生产量,参数 3 表示生产起始时间,参数 4 表示生产终止时间。

  2. 消耗记录(可以有多条):字符串以 AddConsumptionRecord 开头 表示消耗记录,共计 3 个参数,每个参数通过 , 分隔,参数 1 表示消耗量,参数 2 表示消耗起始时间,参数 3 表示消耗终止时间。

  3. 查询命令(只有一条,且为最后一条):字符串以 QueryNetEnergy 表示查询净能量,共 3 个参数,3 个参数间通过 , 分隔,参数 1 表示查询某个版本内的消耗记录(32 位整型数据,如查询全量版本,则该字段为字符 A),参数 2 表示查询起始时间,参数 3 表示查询终止时间(查询时间段为闭区间,即包含起始和终止时间点)

输出描述

净能量,32 位整型数据(四舍五入),取值范围:−2,147,483,648∼2,147,483,647。

示例1

输入

AddProductionRecord,wind,500,1640000000,1640001000
AddConsumptionRecord,100,1640000000,1640000600
AddConsumptionRecord,200,1640000251,1640001251  
QueryNetEnergy,3,1640000000,1640001000

输出

250

说明

版本 1: AddProductionRecord,wind,500,1640000000,1640001000

版本 2: AddConsumptionRecord,100,1640000000,1640000600

版本 3: AddConsumptionRecord,200,1640000251,1640001251

QueryNetEnergy,3,1640000000,1640001000

只取前 3 条记录,时间在 1640000000\~1640001000 区间内的

版本 1 完全在查询时间内,生产量 500

版本 2 完全在查询时间内,消耗量 100

版本 3 时间部分重叠,消耗量为 200∗(1640001000−1640000251)/(1640001251−1640000251)=149.8

净能量为 500−100−149.8=250.2,四舍五入为 250

示例2

输入

AddProductionRecord,wind,1000,1640000000,1640000500
QueryNetEnergy,1,1640001000,1640002000

输出

说明

版本 1: AddProductionRecord,wind,1000,1640000000,1640000500

QueryNetEnergy,1,1640001000,1640002000

只取前 1 条记录,时间在 1640001000\~1640002000 区间内的

版本 1 不在查询时间内,查询版本 1 净能量为 0

解题思路

核心思想

能量管理系统的净能量计算,核心思想:

  1. 版本控制:每条命令对应一个版本号,查询时只考虑指定版本范围内的记录
  2. 加权计算:时间重叠时,按交集占比折算有效量
    • 交集长度 / 总时长 = 加权比例
  3. 四舍五入:最终结果四舍五入到32位整数

算法步骤

  1. 解析查询命令,获取版本号范围和查询时间段
  2. 遍历命令列表,遇到查询命令停止
  3. 对每个生产/消耗记录:
    • 计算时间交集
    • 按交集占比加权计算贡献
    • 累加到总能量(生产为正,消耗为负)
  4. 四舍五入并返回结果

复杂度分析

  • 时间复杂度:O(n),n为命令数量
  • 空间复杂度:O(1),只使用常
THE END