【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

相关文章

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public