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

华为2025年校招笔试真题手撕教程(一)

一、题目

输入:

第一行为记录的版本迭代关系个数N,范围是[1,100000];

第二行到第N+1行:每行包含两个字符串,第一个字符串为当前版本,第二个字符串为前序版本,用空格隔开。字符串包含字符个数为[1,100],没有前序版本的第二个字符串固定为NA。

输出:

所有迭代次数最多的补丁版本号字符串列表,多个版本号以字典序排序排列,用空格隔开。

二、分析

这一题目主要涉及版本迭代关系的处理以及相关统计和排序操作。首先,题目给出了输入的第一行为记录的版本迭代关系个数 N,其范围在 1 到 100000 之间,这意味着我们需要处理的数据量可能较大,因此在算法的效率和性能方面需要加以考虑,以确保程序能够在合理的时间内处理完成。接下来的第二行到第 N+1 行,每行包含两个字符串,第一个字符串代表当前版本,第二个字符串代表前序版本。这里特别指出,没有前序版本的第二个字符串固定为 NA。这提示我们在处理版本迭代关系时,要能够区分出哪些版本是初始版本(即没有前序版本的那些,对应第二个字符串是 NA 的情况),哪些是有明确前序版本的后续版本。

我们的目标是输出所有迭代次数最多的补丁版本号字符串列表,且多个版本号按字典序排序排列,用空格隔开。这涉及到几个关键步骤:

首先,需要构建一个合适的数据结构来记录各个版本的迭代关系以及对应的迭代次数。比如,可以使用哈希表(字典)来存储每个版本的信息。其中,键可以是版本号字符串,而值可以是一个包含前序版本以及迭代次数等信息的结构。通过遍历输入的每一条版本迭代记录,更新哈希表中相应版本的前序版本关系,并对每个版本的迭代次数进行累加统计。对于那些前序版本为 NA 的情况,可以将其视为初始版本,其迭代次数初始为 1(或者根据具体问题中迭代次数定义的起始值来确定)。而对于有前序版本的后续版本,在更新迭代次数时需要考虑其与前序版本之间的关系是否会导致当前版本的迭代次数发生变化,例如是否是基于前序版本进行进一步迭代从而使得自身迭代次数在前序版本基础上有所增加等情况(不过题目中未明确提及迭代次数的计算规则,需要进一步明确题目意图,但按照常规理解可能每个版本迭代记录的出现代表该版本的一次迭代,所以可能每个版本的迭代次数就是它在输入中出现的次数,无论前序版本如何,但需要结合实际问题语境来确定)。然后,在统计完所有版本的迭代次数之后,需要找出迭代次数最多的那些版本。这可以通过遍历哈希表中的所有版本及其对应的迭代次数,记录下出现的最大迭代次数,接着再次遍历哈希表,将迭代次数等于该最大值的所有版本号收集起来。

最后,对收集到的这些版本号按照字典序进行排序。字典序的排序规则是比较字符串中各个字符的 Unicode 编码值进行逐位比较,直到找出不同之处确定先后顺序。在排序完成后,将这些版本号用空格隔开形成输出字符串。在实现过程中,需要注意处理各种边界情况,比如当所有版本的迭代都次数为 1 且只有一个版本时,或者所有版本的迭代次数相同但有多个版本时,如何正确地输出结果。同时,由于输入的版本号字符串长度可能较长(每个包含 1 到 100 个字符),在处理字符串比较和排序等操作时,要确保算法的效率,避免不必要的复杂度增加。此外,对于数据输入和输出的格式也要严格按照题目要求来进行,确保程序的正确性和可用性。

三、代码

以下是一个用 Python 实现的完整代码来解决这个问题。代码主要通过构建一个版本迭代关系的字典来统计每个版本的迭代次数,然后找出迭代次数最多的版本并按字典序排序输出。

def main():import sysinput = sys.stdin.read().splitlines()# 第一行是版本迭代关系个数NN = int(input[0])# 构建版本迭代次数字典version_count = {}for i in range(1, N+1):current_version, previous_version = input[i].strip().split()# 统计当前版本的迭代次数if current_version in version_count:version_count[current_version] += 1else:version_count[current_version] = 1# 如果前序版本不是NA,且不在版本字典中,则将其加入字典(迭代次数初始化为0)if previous_version != "NA" and previous_version not in version_count:version_count[previous_version] = 0# 找出最大迭代次数max_count = max(version_count.values())# 收集所有迭代次数等于最大值的版本max_versions = [version for version, count in version_count.items() if count == max_count]# 按字典序排序max_versions.sort()# 输出结果print(' '.join(max_versions))if __name__ == "__main__":main()

http://www.lryc.cn/news/2385430.html

相关文章:

  • 第9.2讲、Tiny Decoder(带 Mask)详解与实战
  • postgresql 常用参数配置
  • Python模块中的私有命名与命名空间管理:深入解析与实践指南
  • 基于PCRLB的CMIMO雷达网络多目标跟踪资源调度
  • AtCoder Beginner Contest 407(ABCDE)
  • VILT模型阅读笔记
  • 掌握 npm 核心操作:从安装到管理依赖的完整指南
  • OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB
  • Awesome ChatGPT Prompts:释放AI对话潜力的开源利器
  • Prompt Tuning:轻量级微调与反向传播揭秘
  • C++ 继承详解:基础篇(含代码示例)
  • PP-YOLOE-SOD学习笔记2
  • OpenLayers 加载测量控件
  • .NET ORM开发手册:基于SqlSugar的高效数据访问全攻略
  • 【PostgreSQL】数据探查工具1.0研发可行性方案
  • C++ 内存管理与单例模式剖析
  • 算法学习——从零实现循环神经网络
  • win10使用nginx做简单负载均衡测试
  • 2025电工杯数学建模B题思路数模AI提示词工程
  • 软考软件评测师——软件工程之开发模型与方法
  • 前端表单中 `readOnly` 和 `disabled` 属性的区别
  • 【日志软件】hoo wintail 的替代
  • OceanBase数据库全面指南(基础入门篇)
  • 异步处理与事件驱动中的模型调用链设计
  • redis配置带验证的主从复制
  • Ollama-OCR:基于Ollama多模态大模型的端到端文档解析和处理
  • OpenCV CUDA 模块中图像过滤------创建一个拉普拉斯(Laplacian)滤波器函数createLaplacianFilter()
  • 图论学习笔记 3
  • 在单片机中如何在断电前将数据保存至DataFlash?
  • 【将WPS设置为默认打开方式】--突然无法用WPS打开文件