**物流仓储多维度成本利润综合查询系统**
2026 华为OD机试真题 7月19日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
某物流企业在全国多个仓库开展仓储业务,需要对不同仓库、不同时间段的入库成本、出库收入和库存损耗进行综合统计分析,用于生成日报、周报和月报。
字段说明及取值范围如下:
| 字段 | 类型 | 取值范围 | 说明 |
|---|---|---|---|
| warehouseId | int | [0, 99] | 仓库编号 |
| numOfWarehouse | int | - | 仓库数量 |
| startDay | int | - | 统计开始天 |
| endDay | int | - | 统计结束天,startDay <= endDay |
| inCost | int | [0, 1000] | 入库成本(千元) |
| outRevenue | int | [0, 2000] | 出库收入(千元) |
| loss | int | [0, 100] | 库存损耗(千元),0 表示无损耗 |
2026 华为OD机试真题 7月19日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
输入描述
warehouses:int[]扁平化数组[w0d0in, w0d0out, w0d0loss, w0d1in, w0d1out, w0d1loss, ...],先存储仓库 0 的数据,再存储仓库 1 的数据,所有仓库数据个数均相同queries:int[][],形如[[warehouseId, startDay, endDay], ...]numOfWarehouse:int,仓库个数
输入保证最多 100 个仓库,每个仓库最多 100 天数据,每天数据连续,中间无空缺。
输出描述
返回 int[][],每个查询结果为 [累计净利润, 累计损耗, 风控标记]。
业务计算规则:
- 净利润 = 累计出库收入 - 累计入库成本
- 累计损耗 = Σ每日损耗
- 损耗率 = 累计损耗 / (累计入库成本 + 累计出库收入) × 100%
风控规则:
- 当损耗率 > 5% 时,触发风控标记(返回 1)
- 当损耗率 <= 5% 时,不触发风控(返回 0)
示例1
输入
[3, 8, 1, 5, 12, 0, 2, 6, 0, 4, 10, 1][[0, 0, 2]]1
输出
[[16,1,0]]
说明
共有 1 个仓库,3 天数据。累计入库成本为 10,累计出库收入为 26,累计损耗为 1,净利润为 16,损耗率为 2.78%,不触发风控。
示例2
输入
[10, 20, 5, 10, 20, 5, 10, 20, 5, 5, 15, 2, 5, 15, 2, 5, 15, 2][[0, 0, 2], [1, 0, 1]]2
输出
[[30,15,1],[20,4,1]]
说明
仓库 0 查询 0-2 天,净利润 30,损耗 15,损耗率大于 5%,触发风控。仓库 1 查询 0-1 天,净利润 20,损耗 4,损耗率大于 5%,触发风控。
解题思路
核心思想
每个查询都要求某个仓库在一段连续日期内的入库成本、出库收入和损耗总和。若每次查询都遍历日期区间,查询次数多时会重复计算。可以为每个仓库分别构建三类前缀和:入库成本前缀和、出库收入前缀和、损耗前缀和。
这样任意区间 [startDay, endDay] 的累计值都可以通过 prefix[endDay + 1] - prefix[startDay] 在 O(1) 时间得到。
算法步骤
- 根据
warehouses.length / (numOfWarehouse * 3)计算每个仓库的数据天数。 - 为每个仓库建立入库、出库、损耗三类前缀和。
- 遍历每个查询
[warehouseId, startDay, endDay]。 - 用前缀和计算累计入库成本、累计出库收入和累计损耗。
- 计算净利润
totalOut - totalIn。 - 用整数比较
totalLoss * 100 > 5 * (totalIn + totalOut)判断损耗率是否大于 5%,避免浮点误差。 - 按查询顺序输出所有结果。
正确性说明
前缀和数组中,第 i 项表示从第 0 天到第 i-1 天的累计值。因此区间 [startDay, endDay] 的总和等于 prefix[endDay + 1] - prefix[startDay],这正好覆盖查询区间内的所有天数且不包含区间外数据。算法分别对入库、出库、损耗建立前缀和,所以每个查询都能得到准确的三项累计值。净利润和风控标记均直接由题目公式计算,因此每个查询输出正确。
复杂度分析
设仓库数为 W,每个仓库天数为 D,查询数为 Q。
时间复杂度:O(WD + Q),构建前缀和需要遍历全部仓库数据,每个查询 O(1)。
空间复杂度:O(WD),用于保存三类