华为上机真题 2022按照身高体重排队
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2022按照身高体重排队相关的知识,希望对你有一定的参考价值。
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!
一、题目描述
1.1 输入描述
两个序列,每个序列由 n 个正整数组成(0 < n <= 100)。第一个序列中的数值代表身高,第二个序列中的数值表示体重。
1.2 输出描述
排列结果,每个数值都是原始序列中的学生编号,编号从1开始。
1.2.1 示例 1
输入
4
100 100 120 130
40 30 60 50
输出
2 1 3 4
说明:输出的第一个数字2表示此人原始编号为2,即身高为100, 体重为30这个人。由于他和编号为 1 的人身高一样,但体重更轻,因此排在 1 号的前面。
1.2.2 示例 2
输入
3
90 110 90
45 60 45
输出
1 3 2
说明:1 和 3 的身高体重都相同,需要按照原有位置关系让 1 排在 3 前面,而不是 3 1 2。
二、解题思路
本题比较简单,根据身高和体重进行排队,只需要根据身高、体重和所在的编号进行排序即可,先比较身高,如果相等,则比较体重,如果体重也相等,则按照排列的序号来。
三、代码实现
代码实现如下所示。
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 105;
struct Node
int h;
int w;
int idx;
g[MAX];
bool cmp(struct Node x, struct Node y)
if (x.h != y.h)
return x.h < y.h;
else if (x.w != y.w)
return x.w < y.w;
return x.idx < y.idx;
int main()
int n;
while (cin>>n)
for (int i = 0; i < n; ++i)
cin>>g[i].h;
g[i].idx = i + 1;
for (int i = 0; i < n; ++i)
cin>>g[i].w;
stable_sort(g, g + n, cmp);
for (int i = 0; i < n; ++i)
if (i) cout<<" ";
cout<<g[i].idx;
cout<<endl;
return 0;
四、时间复杂度
时间复杂度:O(nlogn)
在上述代码中,时间主要耗费在稳定排序上,排序的时间复杂度为 O(nlogn),所以总时间复杂度为 O(nlogn)。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
以上是关于华为上机真题 2022按照身高体重排队的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试 - 按身高和体重排队(Java) | 机试题+算法思路+考点+代码解析 2023
华为OD机试真题Python实现身高排序真题+解题思路+代码(2022&2023)