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

题目描述

爱丽丝在人偶制作的过程中,为了方便维护众多的“上海人偶”,为每个人偶标记了不同的版本号。随着人偶版本的更迭,版本号的排布变得十分混乱,她需要你帮忙将这些版本号按从小到大进行整理。
每个版本号字符串由主版本号和可选的测试版本号组成:
1. 主版本号:由 1 至 4 个非负整数组成,整数之间用 `.` 分隔(例如 `1.0.2`)。
2. 测试版本号:若存在,则位于主版本号之后,以空格分隔,格式为 `betaX`,其中 X 为正整数(例如 `1.0.2 beta3`)。若不包含此部分,则该版本为正式版。
排序规则如下:
1. 比较主版本号:从左至右依次比较对应位置的整数。若在某个位置数字不同,则数字较小者对应的版本号较小;若一个主版本号是另一个的前缀且两者长度不同,则较短者较小(例如 `1.0` 当主版本号完全相同时:
- 测试版总是小于正式版(例如 `1.0.0 beta9` < `1.0.0`)。
- 若两者均为测试版,则比较 `beta` 后续的整数 X ,数字较小者对应的版本号较小。

输入输出

输入描述
第一行包含一个整数 n ( 1 ≤ n ≤ 100 ),表示版本号的数量。
接下来的 n 行,每行包含一个符合上述格式的版本号字符串。
主版本号的每个部分均为 [0, 1000] 范围内的整数,且不含多余的前导零(除了数字 `0` 本身)。若存在 `beta` 字段,其后的数字 X 亦在 [1, 1000] 范围内。
输出描述
输出共 n 行,每行一个字符串,表示按升序排列后的版本号序列。

样例共 1 组

样例 1 · 样例排序说明: - 首先比较主版本号:`1.0.0.0` 的部分位数字小于 `1.0.0.1` 和 `1.0.1.0`,故排在最前。 - 对于主版本号同为 `1.0.0.0` 的两个版本,比较测试版编号:由于 2 < 3 ,故 `beta2` 排在 `beta3` 之前。 - 对于主版本号同为 `1.0.0.1` 的两个版本,由于测试版 `beta1` 必须小于正式版,故 `1.0.0.1 beta1` 排在 `1.0.0.1` 之前。
输入
5
1.0.1.0
1.0.0.0 beta3
1.0.0.1 beta1
1.0.0.0 beta2
1.0.0.1
输出
1.0.0.0 beta2
1.0.0.0 beta3
1.0.0.1 beta1
1.0.0.1
1.0.1.0

算法解析依据一般

考点:排序

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

题目画像

  • 数据规模:n ≤ 100
  • 复杂度门槛:允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:排序

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

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

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

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

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

该范式的通法易错点

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

对照本题

  • 数据规模 n ≤ 100,允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 5 / 1.0.1.0 / 1.0.0.0 beta3 / 1.0.0.1 beta1 / 1.0.0.0 beta2 / 1.0.0.1 → 输出 1.0.0.0 beta2 / 1.0.0.0 beta3 / 1.0.0.1 beta1 / 1.0.0.1 / 1.0.1.0

样例排序说明:

  • 首先比较主版本号:1.0.0.0 的部分位数字小于 1.0.0.11.0.1.0,故排在最前。
  • 对于主版本号同为 1.0.0.0 的两个版本,比较测试版编号:由于 2 < 3 ,故 beta2 排在 beta3 之前。
  • 对于主版本号同为 1.0.0.1 的两个版本,由于测试版 beta1 必须小于正式版,故 1.0.0.1 beta1 排在 1.0.0.1 之前。

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

本题来源:2026年-华为-04月23号留学生开发岗。

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