丢失报文位置 - 华为机试真题题解

华为机试真题

题目描述

某通信系统持续向外发送报文,使用数组 nums 保存 n 个最近发送的报文,用于在报文未达到对端的情况下重发。报文使用序号 sn 表示,序号 sn 按报文发送顺序从小到大排序,相邻报文 sn 不完全连续且可能相同。报文使用循环覆盖的方式保存,即 nums 数组填满后,从头开始保存新的报文。假设需要重发序号为 sn 的报文。请找出序号为 sn 的报文在数组中的起始位置和结束位置。

输入

第一行输入:数组 nums 的大小 n,取值范围为 [0, 10000]。
第二行输入:数组中的所有报文序号 snsn 取值范围为 [0, 100000]。
第三行输入:需要重发的报文序号 sn,取值范围为 [0, 100000]。

输出

输出两个整数 startend,表示需要重发的报文序号 sn 在数组中的起始和结束下标。

示例1

输入:
7
0 0 1 2 2 5 6
1

输出:
2 2

解释:
nums 数组大小为 7,保存了 7 个报文,sn 分别是 0 0 1 2 2 5 6,sn 为 1 的报文在数组中仅有 1 个,下标是 2,因此输出 2 2。

示例2

输入:
7
0 0 1 2 2 5 6
2

输出:
3 4

解释:
nums 数组大小为 7,保存了 7 个报文,sn 分别是 0 0 1 2 2 5 6,sn 为 2 的报文在数组中有 2 个,下标分别是 3 和 4,因此输出 3 4。

示例3

输入:
7
4 4 7 8 2 3 4
4

输出:
6 1

解释:
nums 数组大小为 7,保存了 7 个报文,sn 分别是 4 4 7 8 2 3 4,sn 为 4 的报文在数组中有 3 个,下标分别是 0、1 和 6。说明 nums 数组存在记录满了从头开始记录的情况,因此输出 6 1。

C++

[代码仅供学习参考并未进行大量数据测试]

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> nums(n);

    // 最小报文sn的索引位置
    int min_sn_idx = 0;
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
        if (nums[i] < nums[min_sn_idx]) min_sn_idx = i;
    }

    int sn;
    cin >> sn;
    // sn的报文在数组中的起始位置和结束位置
    int start = -1, end = -1;
    for (int i = 0; i < n; i++) {
        // 因为题意说 “序号 `sn` 按报文发送顺序从小到大排序”,因此从最小报文开始遍历数组,并同时更新 start 和 end
        int idx = (i + min_sn_idx) % n;
        if (nums[idx] == sn) {
            if (start == -1) start = idx;
            end = idx;
        }
    }

    cout << start << " " << end << endl;

    return 0;
}

希望这个专栏能让您熟练掌握算法, 🎁🎁🎁 立即订阅

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

#面经##春招##C++##笔试##算法#
C++笔试真题题解 文章被收录于专栏

笔试真题题解

全部评论

相关推荐

个人背景:学院二本计科专业&nbsp;大二开始实习个人经历:安克创新&nbsp;、理想汽车、字节跳动碎碎念:我做事只有三分钟热度。看到进了大厂的同学,我会羡慕,也会跟着努力上进;但遇到好看的小说,我又会放下手头的事沉迷其中,之前的坚持也就中断了。我有些自卑,总觉得自己学历和外貌都不够好。之前偶然在网上受到关注,我就喜欢上了上网,因为这里有很多人认可我。但我也很在意别人的评价,偶尔看到嘲讽的言论,会触发我的自卑情绪,让我感到愤怒。有时候我会强硬地回怼,有时候又会懦弱地选择无视。我也有虚荣心。不管是拿到安克、理想还是字节的机会,我在分享的时候都会带着这份心思。我会特意强调自己学历不好,是为了衬托出过程的艰难,以此显得自己更厉害。我知道,人往往会炫耀自己缺少的东西,来掩盖内心的空洞。我总想着走捷径,不太喜欢踏踏实实地做事。找实习的时候,我花了更多时间在研究面试技巧上,而不是提升专业能力。我会反复听面试录音分析技巧,看面试教程学习怎么和不同的面试官沟通,还会每天自言自语练习语言表达,同学都觉得我有点奇怪。我的实习生涯里,侥幸和运气占了很大一部分。我总在想,如果有一天我失去了这份幸运,这些特质可能会让我一蹶不振。ps:&nbsp;很多人会问我学习路线和经验&nbsp;但是就像我上面说的&nbsp;我的实习过程靠的很多是关键节点的运气&nbsp;技术上面我可能不如很多人&nbsp;&nbsp;所以请大家理性求助和理性参考我的回答&nbsp;附上我的投递记录
我的offer在哪里...:从去年看到现在,飞升哥就是榜样
我的求职进度条
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务