华为上机真题 2023事件推送

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2023事件推送相关的知识,希望对你有一定的参考价值。

🎈 作者:Linux猿

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

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

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


目录

一、题目描述

1.1 输入描述

1.2 输入限制

1.3 输出描述

1.4 测试样例

1.4.1 示例 1

二、解题思路

四、时间复杂度


一、题目描述

同一个数轴 X 上有两个点的集合 A=A1, A2, ..., Am 和 B=B1, B2, ..., Bn。Ai 和 Bj 均为正整数, A、B 已经按照从小到大排好序,A、B 均不为空。给定一个距离 R(正整数),列出同时满足如下条件的所有(Ai, Bj)数对:

1)Ai <= Bj

2)Ai, Bj 之间的距离小于 R。

在满足 1)2)的情况下,每个 Ai 只需输出距离最近的 Bj。

输出结果按 Ai 从小到大顺序排序。

1.1 输入描述

第一行三个正整数 m, n, R;

第二行 m 个正整数,表示集合 A;

第三行 n 个正整数,表示集合 B;

1.2 输入限制

1 <= R <= 100000, 1 <= n, m <= 100000, 1 <= Ai, Bj <= 1000000000

1.3 输出描述

每组数对输出一行 Ai  和 Bj,以空格隔开。

1.4 测试样例

1.4.1 示例 1

输入

4 5 5
1 5 5 10
1 3 8 8 20

输出

1 1
5 8
5 8

二、解题思路

本题属于简单题,在题目描述中,两个集合都已经按照大小排序,求满足:

1)Ai <= Bj

2)Ai, Bj 之间的距离小于 R。

两个条件的数对,只需要将 A 数对中的元素在 B 数对中依次比较即可(因为都已经排好序),满足条件的输出数对(Ai,Bi)。

注意:一个 Bi 可能对应多个 A 集合中的元素。

三、代码实现

代码实现如下所示。

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

void closestDistance(int m, int n, int R)

    int val;
    vector<int>g;
    for (int i = 0; i < m; ++i) 
        cin>>val;
        g.push_back(val);
    

    int idx = 0;
    for (int i = 0; i < n; ++i) 
        cin>>val;
        while (idx < m) 
            if (val >= g[idx] && val - g[idx] < R) 
                cout<<g[idx]<<" "<<val<<endl;
             else if (val < g[idx]) 
                break;
            
            idx++;
        
    


int main()

    int m, n, R;
    while (cin>>m>>n>>R) 
        closestDistance(m, n, R);
    
    return 0;

四、时间复杂度

时间复杂度:O(n + 2*m)

在上述代码中,closestDistance 函数中,第一个 for 循环时间复杂度为 O(m),第二个 for 循环的时间复杂度为 O(n + m),所以总的时间复杂度为 O(n + 2m)。


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


以上是关于华为上机真题 2023事件推送的主要内容,如果未能解决你的问题,请参考以下文章

华为上机真题 2023数组去重和排序 (华为机考真题)

华为机试真题 Java 实现事件推送

2022华为机试真题 C++ 实现事件推送

华为上机真题 2023寻找相同子串

独家华为OD机试提供C语言题解 - 事件推送

华为OD机试真题Python实现最近的点真题+解题思路+代码(2022&2023)