仓库盘点

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

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

题目描述

仓库中有若干类物品,每类物品都有一个类别编号(整型)。年底进行仓库盘点,统计每类物品的件数,按照件数从多到少的顺序为物品排序,整理完毕输出物品编号序列。

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

输入描述

一串物品类别编号,每个编号对应该类物品的一次入库,它是按照入库先后排列的。

格式:一行字符串,编号用逗号分隔,如 1,2,2,3,3,3

输出描述

整理后的物品编号序列,用逗号分隔。

补充说明:

  1. 如果物品的件数相同,则按照物品首次入库的先后顺序排列。
  2. 物品种类不超过 10 ,所有物品的总件数不超过 100

示例1

输入

1,2,2,3,3,3

输出

3,2,1

说明

因为编号为 3 的有 3 件,编号为 2 的有 2 件,编号为 1 的有 1 件,按件数排序为从高到低排序, 3 件 > 2 件 > 1 件,输出对应编号顺序为: 3 2 1

示例2

输入

3,3,2,2,1,1

输出

3,2,1

说明

因为所有物品的件数均为两件,按物品首次出现的先后顺序排序,输出对应编号顺序为: 3 2 1

解题思路

核心思想

计数排序 + 自定义比较器:遍历一次统计每个编号的出现次数和首次出现位置,然后按规则排序。

关键步骤

  1. 遍历数组,用哈希表统计每个编号的出现次数
  2. 同时记录每个编号首次出现的位置
  3. (-次数, 首次位置) 排序

算法步骤

  1. 解析输入字符串为整数列表
  2. 遍历列表,统计 cnt[id]first[id]
  3. 获取所有不同的编号列表
  4. 排序:件数降序,件数相同按首次出现位置升序
  5. 输出排序后的编号序列

复杂度分析

  • 时间复杂度:O(n + k log k),n 为物品总数,k 为物品种类数
  • 空间复杂度:O(k),存储计数
THE END