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

news/2024/7/20 18:21:42 标签: 算法, 华为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))          # 身高、体重、编号整合为三元的元组,组成一个新的列表lst

lst.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.niftyadmin.cn/n/5254888.html

相关文章

可视化监管云平台EasyCVR宠物粮食食品厂智能视频监控方案

由于我国养宠物群体的不断膨胀&#xff0c;宠物市场也占据了经济的很大一部分&#xff0c;宠物做为人类的好朋友&#xff0c;可以给人们带来极高的精神抚慰&#xff0c;作为“毛孩子”家长&#xff0c;爱宠人士自然不会亏待自家宠物&#xff0c;都会选择最好的口粮以供宠物食用…

轻松创建自定义手势图案锁 - Vue 手势密码锁组件

说在前面 &#x1f388;Vue 手势密码锁组件是一个功能强大且易于集成的解决方案&#xff0c;旨在为您的应用程序提供安全的登录体验。该组件允许用户通过绘制特定的手势图案来解锁应用程序&#xff0c;取代传统的用户名和密码输入方式。通过引入图案手势锁&#xff0c;用户可以…

【spring boot】RestTemplate 链接带签名post请求 400 bad request

由于项目需要从服务端对第三方发起请求&#xff0c;而且第三方没有提供SDK的情况下&#xff0c;只能根据对方api文档发送请求了&#xff0c;对方接口的格式是&#xff1a;地址签名&#xff0c;post请求上送具体参数的方式去请求对方服务。 背景 很简单的一个需求&#xff0c;然…

Jmeter 请求签名api接口-BeanShell

Jmeter 请求签名api接口-BeanShell 项目签名说明编译扩展jar包jmeter 使用 BeanShell 调用jar包中的签名方法 项目签名说明 有签名算法的api接口本地不好测试&#xff0c;使用BeanShell 扩展jar 包对参数进行签名&#xff0c;接口签名算法使用 sha512Hex 算法。签名的说明如下…

静态链接库和动态链接库(隐式载入显式载入)

文章目录 动态链接库和静态链接库什么是链接库&#xff1f;静态链接库动态链接库动态链接库的俩种链接方式加载时动态链接运行时动态链接 动态链接库和静态链接库 动态链接库和静态链接库都是共享代码的方法&#xff0c;只是二者略有区别。 以C/C为例&#xff0c;一个可执行文…

入职字节外包一个月,我离职了。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

王炸升级!PartyRock 10分钟构建 AI 应用

前言 一年一度的亚马逊云科技的 re:Invent 可谓是全球云计算、科技圈的狂欢&#xff0c;每次都能带来一些最前沿的方向标&#xff0c;这次也不例外。在看完一些 keynote 和介绍之后&#xff0c;我也去亲自体验了一些最近发布的内容。其中让我感受最深刻的无疑是 PartyRock 了。…

考研真题C语言

【2015年山西大学考研真题】输入一行字符&#xff0c;分别统计其中英文字母、空格、数字和其他字符的 个数。 &#xff08;1&#xff09;算法的基本思想如下&#xff1a; 1. 遍历输入的字符串&#xff0c;依次判断每个字符的类型。 2. 判断字符的类型&#xff0c;根据字符的AS…