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

华为OD新系统机试真题-端口流量统计(C/C++/Py/Java/Js/Go)

端口流量统

华为OD机试真题 华为OD上机考试真题 4月26号 100分题型

华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

给定一个整数数组 portRates,portRates[i] 表示该端口第 i分钟端口流量速率(单位:bps)。

返回一个数组 ratesStat,ratesStat[i] 表示多少分钟以后出现比当前更大的流量速率,如果没有出现更大的流量速率,则值为0。

输入描述

输入给定的整数数组,数字以逗号分割。

输出描述

输出所需ratesStat,数字以逗号分割。

用例1

输入

730,740,750,710,690,720,760,730

输出

1,1,4,2,1,1,0,0

说明

输入数组第 0分钟端口流速是 730bps,第 1 分钟端口流速是 740bps,相差 1 分钟,则返回数组第 0 个元素的值为 1;

输入数组第 2 分钟端口流速是 750 bps,第 6 分钟端口流速是 760 bps,相差 4 分钟,则返回数组第 2 个元素的值为 4。

用例2

输入

800

输出

0

说明

只有一个数据,返回 0

用例3

输入

800,700

输出

0,0

说明

只有两个元素,后一个流量比第一个流量低,返回 0,0

用例4

输入

700,800

输出

1,0

说明

只有两个元素,后一个流量比第一个流量高,返回 1,0

题解

思路:单调栈

  1. 这类题属于单调栈的模板题,遇到求每个元素之后/之前比当前大/小的题型时可以考虑使用单带栈算法解决。

  2. 本题实际要求多少分钟以后出现比当前更大的流量速率比较推荐使用从后往前进行处理,并且维持一个递减栈。栈中存储元素下标方便进行间隔时间计算。

  3. 具体逻辑遍历当前元素portRates[i]时:

    1. 首先递归弹出栈中小于等于当前元素的数据。

    2. 如果此时栈为空,说明后续没有比当前元素大的,设置ratesStat[i]为0,否则设置ratesStat[i] = stk.top() - i

    3. 将当前下标压入栈中

  4. 按照3的逻辑即可得到正确结果,返回结果数组即可。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> #include<stack> using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vector<int> split(const string& str, const string& delimiter) { vector<int> result; size_t start = 0; size_t end = str.find(delimiter); while (end != string::npos) { result.push_back(stoi(str.substr(start, end - start))); start = end + delimiter.length(); end = str.find(delimiter, start); } // 添加最后一个部分 result.push_back(stoi(str.substr(start))); return result; } vector<int> StatPortRates(vector<int>& portRates) { int n = portRates.size(); vector<int> ratesStat(n, 0); // 单调递减栈 stack<int> stk; for (int i = n - 1; i >= 0; i--) { while (!stk.empty() && portRates[i] >= portRates[stk.top()]) { stk.pop(); } if (stk.empty()) { ratesStat[i] = 0; } else { ratesStat[i] = (stk.top() - i); } stk.push(i); } return ratesStat; } int main() { string input; getline(cin, input); vector<int> portRates = split(input, ","); vector<int> ratesStat = StatPortRates(portRates); // 输出结果 int n = ratesStat.size(); for (int i = 0; i < n; i++) { cout << ratesStat[i]; if (i != n - 1) { cout << ","; } } return 0; }

JAVA

import java.util.*; public class Main { public static int[] statPortRates(int[] portRates) { int n = portRates.length; int[] ratesStat = new int[n]; // 单调递减栈(存索引) Deque<Integer> stack = new ArrayDeque<>(); for (int i = n - 1; i >= 0; i--) { while (!stack.isEmpty() && portRates[i] >= portRates[stack.peek()]) { stack.pop(); } if (!stack.isEmpty()) { ratesStat[i] = stack.peek() - i; } else { ratesStat[i] = 0; } stack.push(i); } return ratesStat; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String[] parts = input.split(","); int[] portRates = new int[parts.length]; for (int i = 0; i < parts.length; i++) { portRates[i] = Integer.parseInt(parts[i]); } int[] res = statPortRates(portRates); for (int i = 0; i < res.length; i++) { System.out.print(res[i]); if (i != res.length - 1) System.out.print(","); } } }

Python

importsys# 单调栈求解defstat_port_rates(portRates):n=len(portRates)ratesStat=[0]*n# 单调递减栈(存索引)stack=[]foriinrange(n-1,-1,-1):whilestackandportRates[i]>=portRates[stack[-1]]:stack.pop()ifstack:ratesStat[i]=stack[-1]-ielse:ratesStat[i]=0stack.append(i)returnratesStat# 读取输入input_str=sys.stdin.readline().strip()portRates=list(map(int,input_str.split(",")))res=stat_port_rates(portRates)print(",".join(map(str,res)))

JavaScript

constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});functionstatPortRates(portRates){constn=portRates.length;constratesStat=newArray(n).fill(0);// 单调递减栈(存索引)conststack=[];for(leti=n-1;i>=0;i--){while(stack.length&&portRates[i]>=portRates[stack[stack.length-1]]){stack.pop();}if(stack.length){ratesStat[i]=stack[stack.length-1]-i;}else{ratesStat[i]=0;}stack.push(i);}returnratesStat;}rl.on('line',function(line){constportRates=line.split(',').map(Number);constres=statPortRates(portRates);console.log(res.join(','));});

Go

packagemainimport("bufio""fmt""os""strconv""strings")// 单调栈求解funcstatPortRates(portRates[]int)[]int{n:=len(portRates)ratesStat:=make([]int,n)// 单调递减栈(存索引)stack:=[]int{}fori:=n-1;i>=0;i--{forlen(stack)>0&&portRates[i]>=portRates[stack[len(stack)-1]]{stack=stack[:len(stack)-1]}iflen(stack)>0{ratesStat[i]=stack[len(stack)-1]-i}else{ratesStat[i]=0}stack=append(stack,i)}returnratesStat}funcmain(){reader:=bufio.NewReader(os.Stdin)input,_:=reader.ReadString('\n')input=strings.TrimSpace(input)parts:=strings.Split(input,",")portRates:=make([]int,len(parts))fori:=0;i<len(parts);i++{portRates[i],_=strconv.Atoi(parts[i])}res:=statPortRates(portRates)fori:=0;i<len(res);i++{fmt.Print(res[i])ifi!=len(res)-1{fmt.Print(",")}}}

C语言

#include<stdio.h>#include<stdlib.h>#include<string.h>// 单调栈求解voidstatPortRates(int*portRates,intn,int*ratesStat){int*stack=(int*)malloc(sizeof(int)*n);inttop=-1;for(inti=n-1;i>=0;i--){while(top>=0&&portRates[i]>=portRates[stack[top]]){top--;}if(top>=0){ratesStat[i]=stack[top]-i;}else{ratesStat[i]=0;}stack[++top]=i;}free(stack);}intmain(){charinput[100000];fgets(input,sizeof(input),stdin);intportRates[100000];intn=0;// 使用 strtok 分割char*token=strtok(input,",");while(token!=NULL){portRates[n++]=atoi(token);token=strtok(NULL,",");}intratesStat[10000];statPortRates(portRates,n,ratesStat);for(inti=0;i<n;i++){printf("%d",ratesStat[i]);if(i!=n-1)printf(",");}return0;}
http://www.jsqmd.com/news/707111/

相关文章:

  • Dart Frog认证授权实战:Bearer和Basic认证完整实现
  • 2026年Q2宁波货架技术选型:湖州货架/绍兴货架/舟山货架/衢州货架/鄞州货架/金华货架/镇海货架/三门货架/选择指南 - 优质品牌商家
  • GLM-OCR在AI编程辅助中的应用:识别代码截图转可执行代码
  • FRCRN单麦16k降噪实战:解决USB麦克风高频底噪与电磁干扰
  • 从零开始:Qwen2.5-7B微调镜像使用全解析,10分钟快速上手
  • jScrollPane移动端适配:触控滚动条的完整解决方案
  • 特效(Effect)
  • SDMatte API设计实践:遵循RESTful规范构建可扩展服务
  • lora-scripts支持增量训练:基于已有模型快速迭代,持续优化你的AI
  • 五.docker环境搭建实例
  • Pixel Aurora Engine应用案例:像素化用户旅程地图(UJM)自动生成
  • PHP扩展开发终极指南:Zephir与PHP-CPP完整教程
  • cantools开发实战:如何扩展支持新的CAN文件格式
  • 2026Q2惠州写字楼搬迁:惠州蚂蚁搬家公司、惠州设备搬迁公司、惠州货物搬运搬迁公司、惠州附近搬家公司、深圳仓库搬家公司选择指南 - 优质品牌商家
  • Focus架构:多模态视频处理的流式压缩技术
  • 用 CDS View 做 TransientProvider,在 Query Designer 里把技术名和字段描述彻底讲清楚
  • 如何快速掌握Fish Shell智能补全:提升命令行效率的终极指南
  • Voxtral-4B-TTS-2603语音合成入门:标点符号(!?。)对语调与停顿的实际影响
  • 工厂巡检新助手:Youtu-VL-4B目标检测实战,快速定位设备零件与统计数量
  • PROJECT MOGFACE自动化面试官模拟:针对Java八股文与算法题的智能练习
  • Keras与tf.image图像增强技术实战指南
  • Real-Anime-ZGPU算力适配:梯度检查点+Flash Attention加速推理实测
  • Phi-3-mini-4k-instruct-gguf惊艳效果展示:10个真实Prompt生成结果全公开
  • Transformer文本生成参数详解与调优指南
  • 2026食品级碳酸氢铵技术解析:农用级碳酸氢铵、农用级碳铵、工业碳铵生产企业、工业级碳酸氢铵生产企业、工业级碳铵生产企业选择指南 - 优质品牌商家
  • 如何用ZLToolKit构建你的第一个TCP回显服务器:完整实战指南
  • 神经网络层数与节点配置的黄金法则与实践
  • fpga系列 HDL : Microchip FPGA开发软件 Libero Soc选择RAM IP(Two Port IP核)
  • 本地GPU预训练Llama模型:技术与优化实践
  • Z-Image-Turbo-辉夜巫女从零开始:个人开发者搭建专属二次元AI绘图平台