**网络数据包收发处理**
2026 华为OD机试真题 6月7日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
某网络设备采用收发机制管理数据包,该机制包含两个区域:缓冲区和发送区,并支持以下指令:
-
RECEIVE x:接收到编号为 x 的数据包。具体规则如下:
- 如果缓冲区没有该编号的数据包,则接收成功,将其存入缓冲区,输出数据包编号
- 如果缓冲区存在该编号的数据包,则接收失败,输出 −1
-
SEND:发送一个数据包。具体规则如下:
- 如果发送区不为空,则从发送区取出一个最早的数据包发送,输出数据包编号
- 如果发送区为空但缓冲区不为空,则将缓冲区中的所有数据包转移到发送区,然后取出最早接收的数据包进行发送,输出数据包编号
- 如果两个区域都为空,则输出 0
-
QUERY:查询最早接收但尚未发送的数据包编号。具体规则如下:
- 如果发送区不为空,则输出发送区中最早的数据包编号
- 如果发送区为空但缓冲区不为空,则将缓冲区中的所有数据包转移到发送区,然后输出最早接收的数据包编号
- 如果两个区域都为空,则输出 0
2026 华为OD机试真题 6月7日华为OD上机新系统考试真题 100 分题型
输入描述
接收到的指令集。
输出描述
对指令处理输出的结果集。
补充说明
-
数据范围
- 指令集数量n:1≤n≤100
- 数据包编号x:1≤x≤1000
- 输入的所有指令格式保证合法
示例1
输入
RECEIVE 1,RECEIVE 2,QUERY,SEND,QUERY,SEND
输出
1,2,1,1,2,2
说明
说明
- RECEIVE 1:缓冲区无重复数据包,接收成功,输出 1
- RECEIVE 2:缓冲区无重复数据包,接收成功,输出 2
- QUERY:发送区为空,将缓冲区数据移至发送区,最早接收 1,输出 1
- SEND:发送区 [1,2],发送并输出 1
- QUERY:发送区剩余 2,输出 2
- SEND:发送区剩余 2,发送并输出 2
示例2
输入
RECEIVE 3,RECEIVE 3,SEND,SEND,SEND
输出
3,-1,3,0,0
说明
说明
- RECEIVE 3:缓冲区无重复数据包,接收成功,输出 3
- RECEIVE 3:缓冲区存在重复数据包,接收失败,输出 −1
- SEND:发送区为空,将缓冲区数据移至发送区,发送并输出 3
- SEND:发送区和缓冲区均为空,输出 0
- SEND:发送区和缓冲区均为空,输出 0
示例3
输入
RECEIVE 1
输出
1
说明
说明
- RECEIVE 1:缓冲区无重复数据包,接收成功,输出 1
解题思路
核心思想
本题是一个队列模拟问题,需要维护两个区域:
- 缓冲区(Buffer):接收数据包的队列,按 FIFO 顺序排列
- 发送区(Send Queue):等待发送的数据包队列
关键数据结构:
- 使用
deque(双端队列)模拟缓冲区 - 使用
deque模拟发送区 - 使用
set记录缓冲区中已存在的编号,实现 O(1) 判重
三种指令处理逻辑:
- RECEIVE x:检查缓冲区是否有重复,无则加入缓冲区
- SEND:从发送区取数据包,若空则将缓冲区全部转移后再取
- QUERY:查看发送区队首,若空则将缓冲区转移后再查看
复杂度分析
- 时间复杂度:O(N),每个指令只需常数时间操作
- 空间复杂度:O(N),存储所有在缓冲区中的
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/683
文章版权归作者所有,未经允许请勿转载。
THE END