【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

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam