華為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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82057.shtml
英文地址,請注明出處:http://en.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() 作為一種快速和方便的調試工具。使用日志框架只比這多花一點點工夫,但更加優雅和靈活。除了用于調試之外,日志還可以為您提供有關應用程序狀態和健康狀況的更多信息,而且這些信息結構更清晰。 一…