华为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.pswp.cn/bicheng/82057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 的多线程

Qt 中的多线程主要用于处理耗时操作,避免阻塞主线程(UI 线程),从而提高程序的响应性和运行效率。以下是 Qt 多线程的相关技术总结: 常见的多线程实现方式 继承 QThread 类 :最基础的实现方式,具…

基于ITcpServer/IHttpServer框架的HTTP服务器

https://www.cnblogs.com/MuZhangyong/p/16839231.html 在基于ITcpServer/IHttpServer框架的HTTP服务器实现中,OnBody方法主要用于接收HTTP请求体数据,而触发HTTP响应通常是在OnMessageComplete方法中完成。以下是完整的响应触发机制说明: sequenceDiagramClient->>…

Windows 下 Qt 项目配置 FFmpeg 简明指南

一、作用 在qt项目中配置ffmpeg库 二、步骤 1、直接使用已经编译好的ffmpeg库文件,分为win32版本和win64版本; 2、win32版本下载地址:https://github.com/sudo-nautilus/FFmpeg-Builds-Win32/releases/tag/latest 3、win64版本下载地址&a…

Attu下载 Mac版与Win版

通过Git地址下载 Mac 版选择对于的架构进行安装 其中遇到了安装不成功,文件损坏等问题 一般是两种情况导致 1.安装版本不对 2.系统权限限制 https://www.cnblogs.com/similar/p/11280162.html打开terminal执行以下命令 sudo spctl --master-disable安装包Git下载地…

SpringBoot3集成Oauth2.1——5资源地址配置

配置问题说明 如下所示,代码配置了两个,过滤器,一个是资源保护,一个是不保护。 /** Description: 配置需要保护的资源* author: 胡涛* mail: hutao_2017aliyun.com* date: 2025年5月23日 下午2:28:20*/BeanOrder(2)public Securi…

Python urllib.parse 模块中的 urljoin 方法

Python urllib.parse 模块中的 urljoin 方法 urljoin 是 Python 标准库中 urllib.parse 模块的一个方法,用于将基础 URL 和相对路径拼接成完整的 URL。它会根据传入的基础 URL 自动处理协议、域名以及路径的部分匹配逻辑。 以下是关于该方法的具体说明和示例&…

AI大模型和SpringAI简介

一、Spring AI 简介 SpringAI整合了全球(主要是国外)的大多数大模型,而且对于大模型开发的三种技术架构都有比较好的封装和支持,开发起来非常方便。 不同的模型能够接收的输入类型、输出类型不一定相同。SpringAI根据模型的输入…

在TIA 博途中下载程序时找不到对应的网卡怎么办?

1. 检查物理连接 确认网线已正确连接PLC和PC,接口指示灯正常。 尝试更换网线或交换机端口,排除硬件故障。 2. 确认网卡驱动已安装 设备管理器检查: 右键点击“此电脑” → “管理” → “设备管理器”。 展开“网络适配器”,确…

Zabbix实践!客户端自动发现

在线答疑:乐维社区 一、客户端状态检查 1.检查客户端的zabbix-agent2是否正常 [rootnode1 ~]# systemctl is-active zabbix-agent2.service active 2.从服务端检查是否可以获得客户端信息 [rootIT-01 ~]# zabbix_get -s ‘192.168.200.135’ -p 10050 -k ‘agent.p…

动态规划中的 求“最长”、“最大收益”、“最多区间”、“最优策略” 双重 for + 状态转移

以最长递增子序列为例 🎯 首先明确目标 以最长上升子序列(LIS)为例,假设输入是: nums : []int{10, 9, 2, 5, 3, 7, 101, 18}我们定义: dp[i]:以 nums[i] 为结尾的最长上升子序列长度目标&…

SEO关键词与长尾词高效布局

内容概要 在SEO优化实践中,关键词布局的科学性与系统性直接影响流量的获取效率与可持续性。本文以核心关键词筛选为起点,结合长尾词挖掘工具与语义关联分析技术,逐步构建覆盖用户全搜索场景的内容矩阵。通过金字塔结构模型,实现高…

考研数一公式笔记

考研数学(一)核心结论与易错点详细笔记 第一部分:高等数学 一、函数、极限、连续 (一) 重要结论与公式 等价无穷小替换 (仅限乘除运算,极限过程为 x → 0 或某特定值导致因子→0): sin x ~ x tan x ~ x arcsin x …

Debezium TableSchemaBuilder详解

Debezium TableSchemaBuilder详解 1. 类的作用与功能 1.1 核心作用 TableSchemaBuilder是Debezium中负责构建表Schema的核心类,主要功能包括: Schema构建:将数据库表结构转换为Kafka Connect的Schema定义主键处理:生成表的主键Schema值Schema处理:生成表的非主键字段Sc…

49 python Matplotlib之Pandas 数据可视化

Pandas 是 Python 中用于数据处理的核心库,其内置了基于 Matplotlib 的可视化功能,可通过 DataFrame.plot() 和 Series.plot() 方法快速生成常见图表,无需手动编写绘图代码,大幅提升效率。 一、Pandas 核心绘图方法 基础语法如下:该代码为伪代码,仅做语法说明,无法执行…

《微服务架构设计模式》笔记

思维导图 1-3章 4-6 章 5-13 章 资料 配套代码仓库:https://github.com/microservices-patterns/ftgo-application 作者网站:https://microservices.io/

手写一个简单的线程池

手写一个简单的线程池 项目仓库:https://gitee.com/bossDuy/hand-tearing-thread-pool 基于一个b站up的课程:https://www.bilibili.com/video/BV1cJf2YXEw3/?spm_id_from333.788.videopod.sections&vd_source4cda4baec795c32b16ddd661bb9ce865 理…

手机打电话时由对方DTMF响应切换多级IVR语音菜单(完结)

手机打电话时由对方DTMF响应切换多级IVR语音菜单(完结) --本地AI电话机器人 上一篇:手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战) 下一篇:编写中 一、前言 经过前面几个篇章的详细阐…

Android.mk解析

一、变量说明: 1.LOCAL_PATH:= $(call my-dir) 此行代码在Android.mk的开头,用于给出当前文件的路径 LOCAL_PATH 用于在开发树中查找源文件 宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录) 2.LOCAL_PACKAGE_NAME := SecSettings …

ip地址改了网络还能用吗?ip地址改了有什么后果

当用户发现自己的网络出现异常时,常常会疑惑:如果IP地址被更改,网络是否还能正常使用?要解答这个问题,需要从IP地址的作用、修改方式以及网络配置等多个角度来分析。 一、IP地址的作用 IP地址是设备在网络中的唯一标识…

Python-Django系列—日志

Python 程序员通常会在其代码中使用 print() 作为一种快速和方便的调试工具。使用日志框架只比这多花一点点工夫,但更加优雅和灵活。除了用于调试之外,日志还可以为您提供有关应用程序状态和健康状况的更多信息,而且这些信息结构更清晰。 一…