**物流仓储多维度成本利润综合查询系统**

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) 时间得到。

算法步骤

  1. 根据 warehouses.length / (numOfWarehouse * 3) 计算每个仓库的数据天数。
  2. 为每个仓库建立入库、出库、损耗三类前缀和。
  3. 遍历每个查询 [warehouseId, startDay, endDay]
  4. 用前缀和计算累计入库成本、累计出库收入和累计损耗。
  5. 计算净利润 totalOut - totalIn
  6. 用整数比较 totalLoss * 100 > 5 * (totalIn + totalOut) 判断损耗率是否大于 5%,避免浮点误差。
  7. 按查询顺序输出所有结果。

正确性说明

前缀和数组中,第 i 项表示从第 0 天到第 i-1 天的累计值。因此区间 [startDay, endDay] 的总和等于 prefix[endDay + 1] - prefix[startDay],这正好覆盖查询区间内的所有天数且不包含区间外数据。算法分别对入库、出库、损耗建立前缀和,所以每个查询都能得到准确的三项累计值。净利润和风控标记均直接由题目公式计算,因此每个查询输出正确。

复杂度分析

设仓库数为 W,每个仓库天数为 D,查询数为 Q

时间复杂度:O(WD + Q),构建前缀和需要遍历全部仓库数据,每个查询 O(1)

空间复杂度:O(WD),用于保存三类

THE END