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

Posted Linux猿

tags:

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

🎈 作者:Linux猿

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

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

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


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.3 测试样例

1.3.1 示例 1

二、解题思路

三、代码实现


一、题目描述

小明升学到小学一年级,来到新班级后发现其他小朋友们的身高参差不齐,然后就想基于各个小朋友和自己的身高差对他们进行排序,请帮忙实现这个排序算法。

1.1 输入描述

第一行为正整数 H 和 N,0 < H < 200, 为小明的身高;0 < N < 50,为新班级其他小朋友个数;

第二行为 N 个正整数,分别是其他小朋友的身高,身高取值为 0~200,且 N 个正整数各不相同。

1.2 输出描述

输出排序结果,各正整数以空格分隔。和小明身高差绝对值最小的小朋友排在前面,和小明身高差绝对值最大的小朋友排在最后,如果两个小朋友和小明身高差一样,则个子较小的小朋友排在前面。

1.3 测试样例

1.3.1 示例 1

输入

100 10
95 96 97 98 99 101 102 103 104 105

输出

99 101 98 102 97 103 96 104 95 105

二、解题思路

本题比较简单,考查排序算法,对新班级其他小朋友排序的时候,按照与小明身高的绝对值进行排序,如果绝对值相等,则按照身高排序。

三、代码实现

代码实现如下所示。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int h;
bool cmp(int x, int y)

    if (abs(x - h) != abs(y - h)) 
        return abs(x - h) < abs(y - h);
    
    return x < y;


int main()

    int n;
    while (cin>>h>>n) 
        int tmp;
        vector<int>g;
        for (int i = 0; i < n; ++i) 
            cin>>tmp;
            g.push_back(tmp);
        
        sort(g.begin(), g.end(), cmp);
        for (int i = 0; i < n; ++i) 
            if (i) cout<<" ";
            cout<<g[i];
        
        cout<<endl;
    
    return 0;

四、时间复杂度

时间复杂度:O(nlogn)。

其中,n 表示新班级其他小朋友的个数,在上述代码中,主要时间花费在 sort 排序上,所以时间复杂度为 O(nlogn)。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


以上是关于华为上机真题 2022寻找身高相近的小朋友的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试题,用 Java 解寻找身高相近的小朋友问题

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

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

2022华为机试真题 C++ 实现找朋友

华为OD机试真题Java实现找朋友真题+解题思路+代码(2022&2023)

华为OD机试真题Python实现好朋友真题+解题思路+代码(2022&2023)