华为 · 排序 · 算法编程题
华为 排序 n ≤ 10 时限 1 秒 / 256 MB

题目描述

小红正在整理自己的 n 本魔法相册,她发现有些珍贵的记忆(照片)由于备份原因,同时出现在了多本相册中。
每张照片由一个唯一的标识符 id 和一个时间戳 t 组成。在一个相册内部,所有照片的 id 互不相同;但在不同的相册之间,可能存在 id 相同的照片。已知相同的 id 总是对应相同的时间戳 t 。
小红需要找出所有在超过一本相册中出现过的照片,并统计它们在所有相册中出现的总次数。请将这些重复的照片按照时间戳 t 从小到大排序后输出。

输入输出

输入描述
第一行输入一个整数 n ( 0 < n < 10 ),表示相册的数量。
接下来的 n 行,每行包含若干个由空格分隔的整数,表示该相册内的照片信息。每两个整数为一个组合,前一个为照片的 id ,后一个为该照片的时间戳 t 。
每行照片的数量 m 满足 0 < m < 100 。所有 id 和 t 均为非负整数。
输出描述
输出一行整数,每两个整数为一个组合,分别为重复出现的照片 id 及其在所有相册中出现的总次数。
组合之间按时间戳 t 升序排列。输入保证至少存在一张重复的照片,且排序结果唯一。

样例共 1 组

样例 1 · 样例说明: - 照片 id 为 999 的时间戳为 1 ,在第 1 本和第 4 本相册中出现,总次数为 2 。 - 照片 id 为 995 的时间戳为 5 ,在第 1 本和第 4 本相册中出现,总次数为 2 。 - 其余照片均只出现了一次。 - 按照时间戳排序, 1 < 5 ,故先输出 9992 ,再输出 9952 。
输入
4
999 1 998 2 997 3 996 4 995 5
994 6 993 7 992 8 991 9 990 10
989 11 988 12 987 13
999 1 995 5 986 14
输出
999 2 995 2

算法解析依据一般

考点:排序

数据规模 n ≤ 10 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:m ≤ 100,n ≤ 10
  • 复杂度门槛:允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:排序

先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。

思路框架(排序 通法 · 非本题专属)

  1. 排序后很多性质变简单:相邻关系、前缀性质、二分可行。
  2. 若题目禁止使用排序库函数,则手写快排/归并(归并还能顺带求逆序对)。
  3. 排序常与其他范式组合,比如「排序 + 贪心」「排序 + 二分」「排序 + 双指针」。

实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。

复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)

该范式的通法易错点

  • 自定义比较函数不满足严格弱序会导致运行时崩溃。
  • 排序后丢失原始下标,题目需要下标时记得用 pair 一起排。

对照本题

  • 数据规模 n ≤ 10,允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 4 / 999 1 998 2 997 3 996 4 995 5 / 994 6 993 7 992 8 991 9 990 10 / 989 11 988 12 987 13 / 999 1 99 → 输出 999 2 995 2

样例说明:

  • 照片 id 为 999 的时间戳为 1 ,在第 1 本和第 4 本相册中出现,总次数为 2 。
  • 照片 id 为 995 的时间戳为 5 ,在第 1 本和第 4 本相册中出现,总次数为 2 。
  • 其余照片均只出现了一次。
  • 按照时间戳排序, 1 < 5 ,故先输出 9992 ,再输出 9952 。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年-华为-1月21号开发岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解