华为上机真题 2022按照身高体重排队

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2022按照身高体重排队相关的知识,希望对你有一定的参考价值。

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.2.1 示例 1

1.2.2 示例 2

二、解题思路

三、代码实现

四、时间复杂度


 注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!

一、题目描述

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

华为上机真题 2022寻找身高相近的小朋友

华为OD机试真题Python实现身高排序真题+解题思路+代码(2022&2023)

华为机试真题 C++ 实现小朋友排队

华为OD机试真题Java实现寻找身高相近的小朋友真题+解题思路+代码(2022&2023)

python 实现复合字段排序,如 :身高一样比体重,如何实现呢?