华为OD机试真题 新系统 - 准备生日礼物 (JavaPyCC++JsGo)

3 阅读4分钟

准备生日礼物

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

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

题目描述

小明在一个充满人文关怀的公司上班,公司每个月都要为该月生日的同事送一份生日小礼物,该事项由小明负责,请帮助小明统计某一月份应该准备多少礼物,重复录入的员工生日以最后一次录入结果为准,请不要重复统计,避免浪费。

输入描述

参数 1,要发放礼物的月份,取值 1 到 12。

参数 2,员工列表。

参数 3,员工生日日期列表,该列表和员工列表中的数据对应存在一一对应关系,长度一致。

补充说明

  1. 小明公司的员工人数不超过 100人。
  2. 员工姓名是字母和数字的组合,姓名长度大于 0,小于 16字节。
  3. 日期录入格式统一采用 Year/Month/Day ,Year 长度为 4,Month和 Day 长度为 11 到 22,系统保证录入日期为合法日期。
  4. 不考虑同名多位员工的情况,名字一致即可认为是同一员工(在生产系统会通过工号区分,本系统简化处理)。

输出描述

该月份要准备的礼品个数。

示例1

输入

5
Alice Bob Charlie David Eve Frank Grace Helen
1985/5/10 1990/10/11 1995/10/11 2000/11/10 2005/05/01 2010/10/13 2015/10/14 2020/5/2	


输出

3


说明

在 5 月份出生的员工有 3 人 ,因此返回为 3 。

示例2

输入

10
Alice Bob Charlie David Eve Frank Grace Helen
1985/05/10 1990/10/11 1995/10/11 2000/11/10 2005/10/13 2010/10/13 2015/10/14 2020/10/15

输出

6


说明

10 月份出生的员工有 6 人,因此返回 6 。

示例3

输入

5
Alice Bob Charlie Alice Eve Frank Grace Helen
1985/5/10 1990/10/11 1995/10/11 1985/7/10 2005/05/01 2010/10/13 2015/10/14 2020/5/2

输出

2

说明

5 月份出生的员工有 2 个,因此返回 2。

说明:Alice重复录入了,第一次录入出生月份为 5 月,第二次录入出生月份为 7 月,因此 Alice不被统计到 5月份。

解题思路

核心思想

本题是一道简单的字符串解析与哈希表(或者字典)应用题。主要逻辑如下:

  1. 输入解析:依次读取目标月份、员工姓名列表、员工生日列表。
  2. 去重与更新:题目要求“重复录入的员工生日以最后一次录入结果为准”。我们可以利用哈希表(字典)存储员工的姓名和对应的生日。顺序遍历姓名和生日列表,将姓名作为键,生日作为值存入字典。由于是按顺序处理,后出现的同名员工会自动覆盖前面的记录,从而天然满足题意。
  3. 统计结果:遍历字典中的所有生日,将其按 / 分割,提取出月份部分。如果该月份等于目标月份,则将计数器加一。
  4. 输出结果:最后输出计数器的值。

复杂度分析

  • 时间复杂度O(N)O(N),其中 NN 是员工的人数。我们需要遍历员工列表将其存入哈希表,然后再遍历哈希表进行月份匹配,两次遍历的时间复杂度均为 O(N)O(N)
  • 空间复杂度O(N)O(N),使用哈希表存储每个员工的姓名和生日,最坏情况下没有重复员工,哈希表大小为 NN