【OD2023C卷真題】20天拿下華為OD筆試之【排序】2023C-身高提供排序【歐弟算法】全網注釋最詳細分類最全的華為OD真題題解

文章目錄

  • 題目描述與示例
    • 題目描述
    • 輸入描述
    • 輸出描述
    • 示例一
      • 輸入
      • 輸出
    • 示例二
      • 輸入
      • 輸出
  • 解題思路
  • 代碼
    • 時空復雜度
  • 進階
  • 華為OD算法/大廠面試高頻題算法練習沖刺訓練

題目描述與示例

題目描述

某學校舉行運動會,學生們按編號(1、2、3.....n) 進行標識,

現需要按照身高由低到高排列,對身高相同的人,按體重由輕到重排列,對于身高體重都相同的人,維持原有的編號順序關系。

請輸出排列后的學生編號

輸入描述

兩個序列,每個序列由 n 個正整數組成(0 < n < 100)。第一個序列中的數值代表身高,第二個序列中的數值代表體重。

輸出描述

排列結果,每個數值都是原始序列中的學生編號,編號從 1 開始

示例一

輸入

4
100 100 120 130
40 30 60 50

輸出

2134

示例二

輸入

3
90 110 90
45 60 45

輸出

132

解題思路

我們一共有三個列表,身高列表h,體重列表w,以及編號列表idx

為了讓身高、體重和編號的信息能夠一一對應,我們使用zip()函數將這三個列表里面的內容綁定為一個包含n個三元元組的列表lst,即

lst = list(zip(h, w, idx))

在排序方面,題目要求我們按身高從小到大排序,身高相同再按體重從小到大排序,身高體重相同則按照編號從小到大排序,均為升序排序。所以直接調用列表的方法sort()或者內置函數sorted()即可完成。即

lst.sort()

最終再將排序后的lst中的編號信息取出來,再用字符串的join()方法將排序后的編號順序組合成一個字符串即可。即

print("".join([str(item[2]) for item in lst]))

代碼

# 題目:2023Q1A-身高提供排序
# 分值:100
# 作者:閉著眼睛學數理化
# 算法:直接調用排序API
# 代碼看不懂的地方,請直接在群上提問n = int(input())
h = list(map(int, input().split()))
w = list(map(int, input().split()))idx = [i for i in range(1, n+1)]    # 編號列表,1到n
lst = list(zip(h, w, idx))          # 身高、體重、編號整合為三元的元組,組成一個新的列表lstlst.sort()                 # 直接對lst排序,會先按照身高排序,再按照體重排序,再按照編號排序
print("".join(str(item[2]) for item in lst))   # 排序后取編號,組成字符串,即為答案

時空復雜度

時間復雜度:O(NlogN)。排序時間復雜度。

空間復雜度:O(N)

進階

如果本題稍作修改,要求我們先按照身高升序排列,再按照體重降序排列,應該如何修改代碼呢?這個時候就要祭出神器lambda匿名函數了。語法如下:

lst.sort(key = lambda x: (x[0], -x[1]))  

keysort()方法或sorted()內置函數的參數,表示排序的依據lambda匿名函數中的x表示的就是lst中的元素,即一個個的三元元組。由于sort()默認的排序方式是升序,(x[0], -x[1])表示對列表先按照x[0]升序排列,在x[0]相同的情況下再按照-x[1]升序排列,即按照x[1]降序排列。通過這樣的方式,我們就實現了身高升序排列,再按照體重降序排列的目的。

對于原題目而言,如果我們也想顯式地寫出lambda匿名函數,則代碼為:

lst.sort(key = lambda x: (x[0], x[1]))  

如果還想再把編號按照升序排列也顯式地寫出,則代碼為

lst.sort(key = lambda x: (x[0], x[1], x[2]))  

lambda匿名函數的作用很多。除了sort()之外,取最值的兩個函數max()min()中包含參數key,表示取最大值或最小值的依據,譬如:

max(lst, key = lambda x: x[0] * x[1]))

表示取身高和體重之積最大的那個人所對應的三元元組。

華為OD算法/大廠面試高頻題算法練習沖刺訓練

  • 華為OD算法/大廠面試高頻題算法沖刺訓練目前開始常態化報名!目前已服務100+同學成功上岸!

  • 課程講師為全網50w+粉絲編程博主@吳師兄學算法 以及小紅書頭部編程博主@閉著眼睛學數理化

  • 每期人數維持在20人內,保證能夠最大限度地滿足到每一個同學的需求,達到和1v1同樣的學習效果!

  • 60+天陪伴式學習,40+直播課時,300+動畫圖解視頻,300+LeetCode經典題,200+華為OD真題/大廠真題,還有簡歷修改、模擬面試、專屬HR對接將為你解鎖

  • 可上全網獨家的歐弟OJ系統練習華子OD、大廠真題

  • 可查看鏈接 OD算法沖刺訓練課程表 & OD真題匯總(持續更新)

  • 綠色聊天軟件戳 od1336了解更多

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214750.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214750.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis基礎系列-主從復制

Redis基礎系列-主從復制 文章目錄 Redis基礎系列-主從復制1. 什么是 Redis 主從復制&#xff1f;2. 主從復制有什么好處&#xff1f;3. 如何配置 Redis 主從復制&#xff1f;4. 主從復制的驗證4.1 如何查看主從搭建成功4.2 主從常見疑問4.3 主從常見命令 5. 主從復制的原理和工…

掌握1688官方API接口:開啟智能商務合作新篇章

當涉及到與1688官方合作的API接口時&#xff0c;以下是一些建議和指導&#xff0c;以幫助您開始編寫相關的代碼。 了解API接口文檔&#xff1a; 在編寫與1688官方合作的API接口之前&#xff0c;首先需要了解1688官方提供的API接口文檔。您可以在1688開放平臺上找到相關的文檔…

12.11 作業

1&#xff0c; 完善對話框&#xff0c;點擊登錄對話框&#xff0c;如果賬號和密碼匹配&#xff0c;則彈出信息對話框&#xff0c;給出提示”登錄成功“&#xff0c;提供一個Ok按鈕&#xff0c;用戶點擊Ok后&#xff0c;關閉登錄界面&#xff0c;跳轉到其他界面 如果賬號和密碼…

王道數據結構課后代碼題p150 第13——17 (c語言代碼實現)

目錄 13.p 和 q 分別為指向該二叉樹中任意兩個結點的指針&#xff0c;試編寫算法 ANCESTOR(ROOT,P,q,r)&#xff0c;找到P和q的最近公共祖先結點 r 14.假設二叉樹采用二叉鏈表存儲結構&#xff0c;設計一個算法&#xff0c;求非空二叉樹 b的寬度(即具有結點數最多的那一層的結點…

Draw.io繪圖操作

使用步驟 以下是使用 draw.io&#xff08;現在的 diagrams.net&#xff09;的一些基本操作步驟&#xff1a; 訪問網站&#xff1a; 打開瀏覽器&#xff0c;訪問 https://app.diagrams.net/。 創建新文檔&#xff1a; 在 diagrams.net 主頁&#xff0c;點擊 “New Diagram” 或…

2023最新vue安裝(npm,yarn,國內鏡像,vue安裝,vue導包)全套教程2023年12月最新

第一步(安裝npm) 官網地址&#xff1a;https://nodejs.org/en/download windows安裝yarn 詳細教程_windows yarn-CSDN博客 第二步&#xff08;yarn下載&#xff09; windows 下需要下載msi文件 &#xff0c;下載地址&#xff1a;https://yarnpkg.com/latest.msi npm install -g…

力扣198. 打家劫舍

動態規劃 思路&#xff1a; 尋找狀態轉移方程&#xff1a; 假設有 n 個房間&#xff1b; 如果偷第 n 個房間&#xff0c;那么第 n - 1 個房間不偷&#xff0c;之前的 n - 2 個房間偷竊到了 M(n - 2)&#xff0c;總共可以偷竊到 M(n - 2) N(n)&#xff1b;如果不偷第 n 個房間…

第11節: Vue3 動態參數

在UniApp中使用Vue3框架使用動態參數&#xff1a; <template> <view> <text>{{ dynamicText }}</text> <button click"changeText">點擊改變文本</button> </view> </template> <script> export de…

SD-WAN解決企業國際互聯組網需求

隨著云計算、移動應用和企業全球化的浪潮&#xff0c;實時應用在不同地點之間的傳輸需求不斷增加&#xff0c;涵蓋異地辦公、視頻會議、遠程桌面、支付交易系統以及遠程醫療等。這些應用的順暢傳輸對于企業至關重要&#xff0c;而SD-WAN&#xff08;軟件定義廣域網&#xff09;…

Spring MVC詳解、靜態資源訪問、攔截器

1. Spring MVC概述 1.1 Spring MVC是什么 SpringMVC是Spring的一個模塊&#xff0c;是一個基于MVC設計模式的web框架。 1.2 Spring MVC執行流程。 1.3 組件分析 前端控制器&#xff08;默認配置&#xff09;Dispatcher Servlet 作用&#xff1a;只負責分發請求。可以很好的對…

這樣的軟件測試面試題,誰面試遇到誰淘汰!!!

88 11.6 自動化測試用例的來源 手工編寫測試用例 把原來手工的測試用例&#xff0c;當成自動化測試用例 11.7 自動化測試的優點與缺點 優點: 1、對程序的回歸測試更方便 2、可以運行更多更繁瑣的測試 3、提高測試效率和準確性&#xff0c;節約時間成本 4、可以執行一些手工測試…

【源碼解析】從ReentrantLock角度聊聊AQS原理

AQS結構 //頭節點 當前持有鎖的線程private transient volatile Node head;/*** Tail of the wait queue, lazily initialized. Modified only via* method enq to add new wait node.*///每個進來的線程都插入到最后private transient volatile Node tail;/*** The synchroni…

MLIR筆記(6)

5. 方言與操作 5.1. 方言的概念 在MLIR里&#xff0c;通過Dialect類來抽象方言。具體的每種方言都需要從這個基類派生一個類型&#xff0c;并實現重載自己所需的虛函數。 MLIR文檔里這樣描述方言&#xff08; MLIR Language Reference - MLIR&#xff09;&#xff1a; 方言…

手把手教你玩轉ESP8266(原理+驅動)

在嵌入式開發中&#xff0c;無線通信的方式有很多&#xff0c;其中 WIFI 是繞不開的話題。說到 WIFI 通信&#xff0c;就不得不提 ESP8266了。 ESP8266 是一款高性能的 WIFI 串口模塊&#xff0c;實現透明傳輸。只要有一定的串口知識&#xff0c;不需要知道 WIFI 原理就可以上…

作為一個產品經理帶你了解Axure的安裝和基本使用

1.Axure的簡介 Axure是一種強大的原型設計工具&#xff0c;它允許用戶創建交互式的、高保真度的原型&#xff0c;以及進行用戶體驗設計和界面設計。Axure可以幫助設計師和產品經理快速創建和共享原型&#xff0c;以便團隊成員之間進行溝通和反饋。Axure提供了豐富的交互組件和功…

Spring--10--Spring Bean的生命周期

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 1.Spring Bean1.1 什么是 Bean簡而言之&#xff0c;bean 是由 Spring IoC 容器實例化、組裝和管理的對象。 1.2 Spring框架管理Bean對象的優勢 2.Bean的生命周期實例…

西工大網絡空間安全學院計算機系統基礎實驗二(phase_2下——漫漫深夜過后的黎明!!!)

內存地址內存地址中的數注釋指向這塊內存的寄存器0xffffd0e8函數phase_2的棧幀0xffffd0e40xffffd0f4函數phase_2的棧幀0xffffd0e00x5655b7b0函數phase_2的棧幀0xffffd0dc0x565566ca函數read_six_numbers的返回地址&#xff0c;函數phase_2的棧幀0xffffd0d80x5655af64舊%ebx的值…

SpringIOC之ConditionEvaluator

博主介紹:?全網粉絲5W+,全棧開發工程師,從事多年軟件開發,在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰,博主也曾寫過優秀論文,查重率極低,在這方面有豐富的經驗? 博主作品:《Java項目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

Netty性能好的原因是什么

Netty性能好的原因 廢話篇Netty性能好的原因是什么1. 非阻塞IO模型高效的Reactor線程模型零拷貝內存池設計無鎖串行化設計高性能序列化協議 廢話篇 相信有同學會經常被問到這樣的問題&#xff0c;不妨下次被面試官問到這種問題&#xff0c;我們可以這樣回答&#xff01; Nett…

簡單實用的firewalld命令

簡單實用的firewalld命令 一、查看防火墻是否打開二、查詢、開放、關閉端口三、查看已監聽端口四、驗證 一、查看防火墻是否打開 systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.…