【OD2023C卷真题】20天拿下华为OD笔试之【排序】2023C-身高提供排序【欧弟算法】全网注释最详细分类最全的华为OD真题题解

本文主要是介绍【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了解更多

这篇关于【OD2023C卷真题】20天拿下华为OD笔试之【排序】2023C-身高提供排序【欧弟算法】全网注释最详细分类最全的华为OD真题题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/482655

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh