华为 · 哈希 · 算法编程题
华为 哈希 n ≤ 500 时限 1 秒 / 32 MB

题目描述

数据表中,一条记录包含表索引和数值两个值。请对表索引相同的记录进行合并(即将相同索引的数值进行求和运算),随后按照索引值的大小从小到大依次输出。

输入输出

输入描述
第一行输入一个整数 n(1 ≤ n ≤ 500) 代表数据表的记录数。
此后 n 行,第 i 行输入两个整数 x_i, y_i(0 ≤ x_i ≤ 11111111;1 ≤ y_i ≤ 10^5) 代表数据表的第 i 条记录的索引和数值。
输出描述
一共若干行(视输入数据变化),第 i 行输出两个整数,代表合并后数据表中第 i 条记录的索引和数值。

样例共 2 组

样例 1 · 在这个样例中,第 1,2 条记录索引相同,合并数值为 1 + 2 = 3 。
输入
4
0 1
0 2
1 2
3 4
输出
0 3
1 2
3 4
样例 2
输入
2
0 1
0 1
输出
0 2

算法解析依据充分

考点:哈希

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

题目画像

  • 数据规模:n ≤ 500
  • 元素值域:x_i ≤ 11111111,y_i ≤ 1e5(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:哈希

用哈希表把「查找/计数」的开销降到 O(1) 均摊。

思路框架(哈希 通法 · 非本题专属)

  1. 一次遍历,把元素作为 key、出现次数/首次位置作为 value 存进哈希表。
  2. 第二次遍历(或边扫边查)拿到需要的信息。
  3. 注意哈希无序:需要按原顺序输出时要额外记录顺序。

实现要点:Python 用 dict / collections.Counter / defaultdict;C++ 用 unordered_map。

复杂度:时间 O(n) 均摊 | 空间 O(n)

该范式的通法易错点

  • 遍历哈希表时依赖了不存在的顺序。
  • 多次查询时每次都重新统计。

对照本题

  • 数据规模 n ≤ 500,允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 元素值域最大到 11111111 —— 求和 / 相乘时记得开 64 位整数。

样例解读

样例 1:输入 4 / 0 1 / 0 2 / 1 2 / 3 4 → 输出 0 3 / 1 2 / 3 4

在这个样例中,第 1,2 条记录索引相同,合并数值为 1 + 2 = 3 。

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

本题来源:华为机试编程模拟题6。

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