当前位置: 首页 > news >正文

华为OD机试真题 新系统 Java实现 【数据包优先级窗口查找】

数据包优先级窗口查找华为OD新系统机试真题 华为OD新系统上机考试真题 5月13号 100分题型更多语言题解可点击查看华为OD机试新系统真题 - 数据包优先级窗口查找(C/C/Py/Java/Js/Go)题解华为OD机试新系统真题目录点击查看: 华为OD机试真题题库目录机考题库 算法考点详解题目内容给定n nn个数据包每个数据包包含i d idid和p r i o r i t y prioritypriority。维护一个大小为k kk的滑动窗口对于每个窗口找出窗口内每个数据包右边第一个p r i o r i t y prioritypriority更高的数据包i d idid。输入描述n nn: 数据包数量 (1 ≤ n ≤ 10 6 1 ≤ n ≤ 10^61≤n≤106)k kk: 窗口大小 (1 ≤ k ≤ 100 1 ≤ k ≤ 1001≤k≤100)p a c k e t s packetspackets: 数据包内容长度为n nn的数组每个元素格式为i d : p r i o r i t y id:priorityid:priority数据包格式:格式: i d : p r i o r i t y id:priorityid:priorityi d idid: 唯一标识符 (1 ≤ i d ≤ 10 9 1 ≤ id ≤ 10^91≤id≤109)p r i o r i t y prioritypriority: 优先级 (1 ≤ p r i o r i t y ≤ 10 9 1 ≤ priority ≤ 10^91≤priority≤109)数值越大优先级越高处理规则:窗口滑动: 从左到右滑动每次窗口包含k kk个连续数据包每个窗口的处理:向右查找第一个p r i o r i t y prioritypriority更高的数据包找到 → 记录该数据包的i d idid未找到 → 不记录跳过条件: 数据包不足以构成完整窗口 (窗口大小k k k数据包总数n nn)→ →→跳过该窗口 窗口内未找到任何p r i o r i t y prioritypriority更高的数据包→ →→跳过该窗口输出描述输出所有未跳过窗口的结果序列每个序列包含该窗口内找到的所有下一个更高优先级数据包i d idid样例1输入5 3 1:5 2:3 3:7 4:6 5:4输出3,3 3说明窗口[ 0 , 2 ] [0,2][0,2]: 数据包为[ 1 : 5 , 2 : 3 , 3 : 7 ] [1:5, 2:3, 3:7][1:5,2:3,3:7]1 : 5 1:51:5后面第一个优先级更高的是3 : 7 3:73:7输出3 332 : 3 2:32:3后面第一个优先级更高的是3 : 7 3:73:7输出3 333 : 7 3:73:7后面没有优先级更高的不输出该窗口输出:3 333 33窗口[ 1 , 3 ] [1,3][1,3]: 数据包为[ 2 : 3 , 3 : 7 , 4 : 6 ] [2:3, 3:7, 4:6][2:3,3:7,4:6]2 : 3 2:32:3后面第一个优先级更高的是3 : 7 3:73:7输出3 333 : 7 3:73:7后面没有优先级更高的不输出4 : 6 4:64:6后面没有优先级更高的不输出该窗口输出:3 33窗口[ 2 , 4 ] [2,4][2,4]: 数据包为[ 3 : 7 , 4 : 6 , 5 : 4 ] [3:7, 4:6, 5:4][3:7,4:6,5:4]3 : 7 3:73:7后面没有优先级更高的不输出4 : 6 4:64:6后面没有优先级更高的不输出5 : 4 5:45:4后面没有优先级更高的不输出该窗口无输出样例2输入4 3 1:1 2:2 3:3 4:4输出2,3 3,4说明窗口[ 0 , 2 ] [0,2][0,2]: 数据包为[ 1 : 1 , 2 : 2 , 3 : 3 ] [1:1, 2:2, 3:3][1:1,2:2,3:3]1 : 1 1:11:1后面第一个优先级更高的是2 : 2 2:22:2输出2 222 : 2 2:22:2后面第一个优先级更高的是3 : 3 3:33:3输出3 333 : 3 3:33:3后面没有优先级更高的不输出输出:2 223 33窗口[ 1 , 3 ] [1,3][1,3]: 数据包为[ 2 : 2 , 3 : 3 , 4 : 4 ] [2:2, 3:3, 4:4][2:2,3:3,4:4]2 : 2 2:22:2后面第一个优先级更高的是3 : 3 3:33:3输出3 333 : 3 3:33:3后面第一个优先级更高的是4 : 4 4:44:4输出4 444 : 4 4:44:4后面没有优先级更高的不输出输出:3 334 44样例3输入4 3 4:4 3:3 2:2 1:1输出说明窗口[ 0 , 2 ] [0,2][0,2]: 数据包为[ 4 : 4 , 3 : 3 , 2 : 2 ] [4:4, 3:3, 2:2][4:4,3:3,2:2]4 : 4 4:44:4后面没有优先级更高的不输出3 : 3 3:33:3后面没有优先级更高的不输出2 : 2 2:22:2后面没有优先级更高的不输出该窗口不输出窗口[ 1 , 3 ] [1,3][1,3]: 数据包为[ 3 : 3 , 2 : 2 , 1 : 1 ] [3:3, 2:2, 1:1][3:3,2:2,1:1]3 : 3 3:33:3后面没有优先级更高的不输出2 : 2 2:22:2后面没有优先级更高的不输出1 : 1 1:11:1后面没有优先级更高的不输出该窗口不输出所有窗口均无输出样例4输入3 4 1:5 2:3 3:7输出说明窗口大小4 44数据包数量3 33窗口无输出无满足结果输出题解思路思路单调栈预处理:使用单调栈算法计算每个数据包右边第一个priority更高的数据包下标。具体逻辑为定义stk维持一个单调递减栈栈中存储数据包下标。定义nextMaxIndex数组存储每个位置右边第一个priority更高的数据包下标开始所有值初始化为-1.遍历输入数据包遍历i时的处理逻辑递归维持栈递减当栈非空并且栈顶元素j小于当前数据优先级时说明该位置为j右侧第一个大于它的下标更新nextMaxIndex[j] i,并弹出栈顶元素。将i压入栈中等待被处理。注意n k时直接返回为空即可。由于k 100可以枚举所有窗口并求出每个窗口的结果序列以这个{i, i k -1}为例使用currentWindRes存储当前窗口结果。确定窗口边界为windClose i k - 1从前往后遍历{i, i k -1}, 当前位置为j如果nextMaxIndex[j] -1或者nextMaxIndex[j] windClose直接跳过(当前窗口内没有优先级更高)。否则加入{packets[j].id, packets[nextMaxIndex[j]].id}按照3的逻辑处理之后如果currentWindRes为空说明改窗口无输出不添加进最终结果。codeimportjava.util.*;publicclassMain{publicstaticListListIntegerpriorityPackets(intn,intk,Listint[]packets){ListListIntegerresnewArrayList();if(nk)returnres;int[]nextMaxIndexnewint[n];Arrays.fill(nextMaxIndex,-1);StackIntegerstacknewStack();// 单调栈找下一个更大值for(inti0;in;i){while(!stack.isEmpty()packets.get(i)[1]packets.get(stack.peek())[1]){nextMaxIndex[stack.pop()]i;}stack.push(i);}// 枚举窗口for(inti0;in-k;i){intrik-1;ListIntegercurnewArrayList();for(intji;jr;j){if(nextMaxIndex[j]!-1nextMaxIndex[j]r){cur.add(packets.get(nextMaxIndex[j])[0]);}}if(!cur.isEmpty()){res.add(cur);}}returnres;}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intnInteger.parseInt(sc.nextLine().trim());intkInteger.parseInt(sc.nextLine().trim());String[]arrsc.nextLine().trim().split( );Listint[]packetsnewArrayList();for(Strings:arr){String[]tmps.split(:);packets.add(newint[]{Integer.parseInt(tmp[0]),Integer.parseInt(tmp[1])});}ListListIntegerrespriorityPackets(n,k,packets);if(res.isEmpty())return;for(inti0;ires.size();i){if(i0)System.out.print( );for(intj0;jres.get(i).size();j){if(j0)System.out.print(,);System.out.print(res.get(i).get(j));}}}}
http://www.zskr.cn/news/1371547.html

相关文章:

  • 机器学习泛化理论:从AIC/BIC到集中不等式的模型选择与误差分析
  • 从岭回归到Lasso:正则化原理、稀疏性与ADMM算法实践
  • 量化精度损失超8.7%?DeepSeek-VL多模态模型INT4部署避坑指南,含Per-Tensor校准实操清单
  • 数据决定上限,准备决定成败:DeepSeek同源训练数据预处理全链路拆解,错过这3个关键阈值=白训2000卡时
  • 紧急通告:Gemini当前版本对非RGB图像(CMYK/灰度/16bit TIFF)存在系统性解析缺陷!已确认影响金融票据识别与工业质检部署,补丁预计Q3上线
  • WorkshopDL终极指南:跨平台Steam创意工坊模组自由下载神器
  • PolyPyGY二维碳材料:计算设计的高性能锂电阳极新星
  • 告别重复造轮子:用ArcGIS脚本工具封装你的Python代码,效率提升不止一点点
  • 从0到1构建企业级脑筋急转弯生成系统:融合知识图谱校验+幽默度评分模型+人工审核SOP(GitHub开源代码已获1.2k Star)
  • Windows Defender移除工具终极指南:3步彻底禁用安全组件,性能飙升30%
  • 从被动应答到自我进化,深度拆解Agent核心技术范式的四年演进之路
  • 拓扑数据分析与机器学习预测燃料电池电极性能
  • 拓扑数据分析实战:从点云到机器学习特征提取
  • 别再只用OTSU了!OpenCV实战:用Triangle算法搞定单峰图像的二值化(附Python代码)
  • 2026年在湖南选智能家居,有线和无线究竟该怎么选?
  • 摒弃地毯式盲搜,智能定位指引科学救援方向 ——视频孪生无感定位驱动煤矿智能化抢险救援技术方案
  • 2026年湖南旧房改造,原来老房升级智能家居有这些攻略?
  • 全域轨迹可回溯,高效破解煤矿灾害搜救难题 ——基于视频孪生无感定位的矿山轨迹溯源搜救技术解析方案
  • 凯莱德门业怎么样?3万平方生产基地、200名员工,专注铸铝门与高端大门定制 - Amonic
  • 如何用1分钟语音数据训练高质量AI语音克隆?GPT-SoVITS完整指南揭秘
  • 基于EMOS与DRN的WRF太阳辐照度集合预报后处理技术详解
  • 从传统到智能:3步解锁Audacity的AI音频处理革命
  • 抖音批量下载器:5分钟掌握高效音乐视频下载技巧,提升创作效率95%
  • 市面上可靠的石牌坊厂商推荐,单门石牌坊/花岗岩石牌坊/复式石牌坊/石雕石牌坊/石牌坊,石牌坊品牌哪家专业 - 品牌推荐师
  • 司替戊醇Stiripentol常见副作用为食欲下降共济失调及嗜睡表现【海得康】
  • 摄像头协议体系研究:从技术架构到应用实践
  • 告别手动创建!Windows 11右键菜单一键添加Markdown文件(以MarkText为例)
  • 企业ESG披露合规危机应对指南(2024欧盟CSRD强制落地倒计时)
  • ChatGPT演讲稿写作正在淘汰不会“结构化叙事”的人——2024技术晋升隐性门槛已悄然升级
  • 中卫外贸建站谷歌优化建站,WaiMaoYa 外贸鸭一站式外贸独立站建设 - 外贸营销工具