当前位置: 首页 > news >正文

题目一: 准备生日礼物 100分

限制:1s 空间限制:256MB 限定语言:C(clang11), C++(clang++11).Java(javac 1.8), Python3(3.9), JavaScript Node(12.18.2), Go(1.14.4), Rust(1.44)
题目描述:小明在一个充满人文关怀的公司上班,公司每个月都要为该月生日的同事送一份生日小礼物,该事项由小明负责,请帮助小明统计某一月份应该准备
多少礼物,重复录入的员工生日以最后一次录入结果为准,请不要重复统计,避免浪费。

输入:
参数1,要发放礼物的月份,取值1到12。
参数2,员工列表。
参数3,员工生日日期列表,该列表和员工列表中的数据对应存在一一对应关系,长度一致。

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

统计某月份生日员工数量的解决方案

问题分析

需要统计指定月份过生日的员工数量,并处理重复录入的员工生日信息。重复录入时以最后一次记录为准。

解决思路
  1. 使用哈希表(或字典)存储员工姓名和生日信息,自动处理重复记录
  2. 遍历员工列表,将每个员工及其生日存入哈希表
  3. 统计哈希表中生日月份等于目标月份的员工数量
C++实现
#include <unordered_map> #include <string> #include <vector> using namespace std; int countBirthdayGifts(int month, vector<string>& employees, vector<string>& birthdays) { unordered_map<string, string> employeeMap; for (int i = 0; i < employees.size(); ++i) { employeeMap[employees[i]] = birthdays[i]; } int count = 0; for (auto& pair : employeeMap) { size_t firstSlash = pair.second.find('/'); size_t secondSlash = pair.second.find('/', firstSlash + 1); int birthMonth = stoi(pair.second.substr(firstSlash + 1, secondSlash - firstSlash - 1)); if (birthMonth == month) { ++count; } } return count; }
Java实现
import java.util.HashMap; import java.util.Map; public class BirthdayCounter { public static int countBirthdayGifts(int month, String[] employees, String[] birthdays) { Map<String, String> employeeMap = new HashMap<>(); for (int i = 0; i < employees.length; i++) { employeeMap.put(employees[i], birthdays[i]); } int count = 0; for (Map.Entry<String, String> entry : employeeMap.entrySet()) { String[] dateParts = entry.getValue().split("/"); int birthMonth = Integer.parseInt(dateParts[1]); if (birthMonth == month) { count++; } } return count; } }
JavaScript实现
function countBirthdayGifts(month, employees, birthdays) { const employeeMap = {}; for (let i = 0; i < employees.length; i++) { employeeMap[employees[i]] = birthdays[i]; } let count = 0; for (const [_, birthday] of Object.entries(employeeMap)) { const birthMonth = parseInt(birthday.split('/')[1]); if (birthMonth === month) { count++; } } return count; }
Go实现
package main import ( "strconv" "strings" ) func countBirthdayGifts(month int, employees []string, birthdays []string) int { employeeMap := make(map[string]string) for i, employee := range employees { employeeMap[employee] = birthdays[i] } count := 0 for _, birthday := range employeeMap { parts := strings.Split(birthday, "/") birthMonth, _ := strconv.Atoi(parts[1]) if birthMonth == month { count++ } } return count }
关键点说明
  1. 使用哈希表自动处理重复员工记录
  2. 日期解析统一采用字符串分割方式
  3. 时间复杂度为O(n),空间复杂度为O(n)
  4. 各语言实现逻辑相同,仅语法差异

这些实现都能正确处理重复员工记录,并准确统计指定月份的生日员工数量。

http://www.jsqmd.com/news/662081/

相关文章:

  • Uncle小说桌面阅读器:打造你的私人数字图书馆,掌握全网小说自由
  • fre:ac音频转换器:免费跨平台的终极音频转换指南
  • 3步免费解锁WeMod Pro高级功能的完整指南:终极WeMod增强工具使用教程
  • 3分钟快速上手:Jellyfin智能中文字幕插件完全指南
  • OpenPLC Editor 技术架构全解与工业自动化开发实战指南
  • 告别Tkinter!用PyQtGraph打造你的专属股票盯盘工具(附完整源码)
  • 日照做养发哪个店好?黑奥秘AI智能检测,90秒精准定位毛发问题 - 美业信息观察
  • 告别错过直播的烦恼:LiveAutoRecord 直播自动录制完全指南
  • 装备类项目审价应对详细实施方案
  • 如何快速优化Windows系统:Winhance中文版完整指南
  • 【地平线开发环境实战】从零构建Docker化AI模型部署平台
  • 域名回购前,为什么建议你先做一次专业评估?
  • @monkeycode-ai就能搞定?Git机器人实测,解放双手不是吹的
  • 深度解析UnityLive2DExtractor:高效提取Live2D Cubism 3资源的完整实战指南
  • 如何实现多平台直播自动录制?LiveAutoRecord 一站式解决方案揭秘
  • 【OS】RTOS任务的几种状态
  • 如何在iOS 15-16设备上绕过激活锁:开源工具完整指南
  • cpp刷题打卡记录29——矩阵置零 旋转图像 除了自身以外数组的乘积
  • abinit学习日记十九——tgw1_6.abi
  • 2026届学术党必备的六大降重复率方案解析与推荐
  • 如何快速掌握几何无衬线字体:开源字体完全指南
  • QT打印 文本 + png公章
  • 【OS】RTOS的任务切换原理
  • 如何用keil5软件的debug进行仿真调试
  • 硬件级精细温控:FanControl 风扇控制系统的技术架构与实战应用
  • 从EEPROM转战SPI Flash?STM32F103驱动W25Q64,你必须搞懂的‘页卷’与擦除机制
  • 微信小程序反编译实战:深度揭秘Wedecode如何实现跨平台源代码还原
  • 【地平线开发环境实战】基于Docker快速部署与配置全流程解析
  • 如何在3分钟内免费实现跨平台远程桌面控制:BilldDesk Pro完全指南
  • 【VSCode】多文件夹工作区的头文件路径引用