8.30华为OD机试真题 新系统 – 快递驿站计费系统(JavaPyCC++JsGo)

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

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

题目描述

请开发一个快递驿站计费系统,根据给定的一组快递存取记录,系统计费每位业主要缴纳的总费用,并按总费用从高到低输出。

系统计费规则如下:

  1. 免费存放时间为 12 小时,从存件时间开始计时,总存放时间 ⩽12 小时不收费,存放时间 = 取件时间 − 存件时间;
  2. 超出免费存放时间的,每 12 小时收取 1 元,不足 12 小时按 12 小时计算,比如存放了 25 个小时,超出免费时间 13 小时,需要收费 2 元;
  3. 同一个房间号的业主,可能有多条存取记录,需要将业主所有快递的超时费用累加得到总费用。

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

输入描述

一组快递存取记录列表,其中一条存取记录对应一个数组,该数组包含 3 个非负整数字段:存件时间、取件时间和业主房间号;存取时间已简化处理采用整型数字,非 24 小时制格式;

  1. 0⩽ 存件时间 ⩽ 取件时间 ⩽100000;
  2. 100< 房间号 <10000;
  3. 输入记录条数的范围:1⩽N⩽1000

输出描述

一个二维数组/列表,表述一组收费记录,每一条收费记录对应一个数组,该数组包含 2 个整数字段:业主房间号和总费用;收费按总费用从高到低排序,总费用相同的,按房间号从小到大排序;

示例1

输入

[[100, 110, 1111], [200, 210, 2222], [150, 165, 3333], [180, 190, 1111]]

输出

[[3333,1],[1111,0],[2222,0]]

说明

3333 房间的业主的快递存件时间是 150,取件时间是 165,则总存放时间为 15 小时,超过免费时间 3 小时,需要收取 1 元;其余业主都在免费时间内,不需要收费,按房间号从小到大排序,因此 1111 号排在前面

示例2

输入

[[10, 30, 303], [25, 50, 303], [40, 70, 201], [60, 90, 201], [100, 130, 102], [150, 180, 102]]

输出

[[102,4],[201,4],[303,3]]

说明

102 有 2 单,存放时间都是 30 小时,超时 18 小时,每单 18/12 向上取整收取 2 元,总费用 4 元;201 业主的总费用也是 4 元,但是 102<201,所以 102 号排在前面

解题思路

核心思想

每条记录只需要算出这一单的超时费用,再按房间号汇总即可。

单次费用的规则很直接:先算存放时长 dur = 取件时间 - 存件时间,dur <= 12 时不收费;否则超出的部分按每 12 小时 1 元向上取整。

算法步骤

  1. 逐条读取记录,得到存件时间、取件时间和房间号。
  2. 计算该单的超时费用。
  3. 用哈希表按房间号累计总费用。
  4. 将所有房间整理成二维数组。
  5. 按总费用降序、房间号升序排序后输出。

复杂度分析

设记录条数为 N。

  • 时间复杂度:O(N log N),主要来自最终排序。
  • 空间复杂度:O(N),用于哈希表和结
THE END