7.22华为OD机试真题 新系统 - 不同Tag类型统计 (Java/Py/C/C++/Js/Go)
不同Tag类型统计2026 华为OD机试真题 7月22日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述给定一个数组元素为数字数组的内容表示多个连续的TLVtag-length-value关于TLV单个TLV具备以下特征tag占位1个数组元素代表类型length占位1个数组元素代表长度且长度值大于0value占位后面连续的length个数组元素tlv长度限制单个TLV所占的数组元素必须是4的倍数不足的部分可用任意数字补齐数值取值范围0-99例如单个TLV数组2130第一个数字2是tag第二个数字1是length第三个数字3是value第四个数字0是补齐现在要求把给定的数组进行分析解析出整个数组中存在多少种不同类型的tag如果解析过程出现数组元素不符合规范则返回0。输入描述数组元素不超过10000TLV的总数不超过1000。输出描述解析出的不同tag类型的数量若格式错误则输出0。示例1输入2,1,3,0,3,1,3,0,0输出0说明格式不对示例2输入2,1,3,0,3,1,3,0输出2说明格式正确2个Tag类型分别是2、3解题思路核心思想数组由若干个连续 TLV 块组成。每个 TLV 至少包含tag、length和length个value元素因此原始长度为2 length。由于单个 TLV 总占位必须是4的倍数所以需要把2 length向上补齐到最近的4的倍数。解析时从数组头部开始每次确定当前 TLV 的实际占位长度校验该段所有元素是否都在0到99之间并把当前tag加入集合。只要某一步无法继续解析直接输出0。算法步骤读取一行输入按英文逗号切分得到数组arr。使用指针index指向当前 TLV 的起始位置。如果当前位置后面没有length字段说明格式错误返回0。读取length arr[index 1]若length 0返回0。当前 TLV 原始长度为2 length补齐后的占位长度为((2 length 3) / 4) * 4。如果当前 TLV 补齐后会越过数组末尾返回0。检查当前 TLV 占用范围内的每个元素若不在0到99之间返回0。将arr[index]加入 tag 集合指针后移一个补齐后的 TLV 长度。当指针刚好走到数组末尾时返回集合大小。复杂度分析设数组长度为n。每个数组元素最多被检查一次时间复杂度为O(n)。需要使用集合保存不同 tag最多保存1000个 TLV 的 tag空间复杂度为O(k)其中k为不同 tag 数量。Javaimportjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Scanner;importjava.util.Set;publicclassMain{staticintsolve(int[]arr){// 从左到右解析连续 TLVindex 始终指向当前 tagintnarr.length;intindex0;SetIntegertagsnewHashSet();while(indexn){// 当前 TLV 至少需要 tag 和 length 两个字段if(index1n){return0;}intlengtharr[index1];// length 必须大于 0否则格式非法if(length0){return0;}// 原始长度为 tag、length、value整体向上补齐到 4 的倍数intrawSize2length;intpaddedSize(rawSize3)/4*4;if(indexpaddedSizen){return0;}// 当前 TLV 占用范围内的所有元素都必须在 0 到 99 之间for(intiindex;iindexpaddedSize;i){if(arr[i]0||arr[i]99){return0;}}tags.add(arr[index]);indexpaddedSize;}returntags.size();}publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);Stringinputscanner.hasNextLine()?scanner.nextLine().trim():;ListIntegernumsnewArrayList();if(!input.isEmpty()){String[]partsinput.split(,);for(Stringpart:parts){Stringitempart.trim();if(!item.isEmpty()){nums.add(Integer.parseInt(item));}}}int[]arrnewint[nums.size()];for(inti0;inums.size();i){arr[i]nums.get(i);}System.out.println(solve(arr));}}Pythondefsolve(arr):# 从数组头部开始逐个解析 TLV 块nlen(arr)index0tagsset()whileindexn:# 当前 TLV 必须至少有 tag 和 lengthifindex1n:return0lengtharr[index1]# length 必须为正数iflength0:return0# 计算 TLV 补齐到 4 的倍数后的实际占位raw_size2length padded_size(raw_size3)//4*4ifindexpadded_sizen:return0# tag、length、value 和补齐元素都必须在 0 到 99 之间forvalueinarr[index:indexpadded_size]:ifvalue0orvalue99:return0tags.add(arr[index])indexpadded_sizereturnlen(tags)lineinput().strip()arr[]iflineelselist(map(int,line.split(,)))print(solve(arr))JavaScriptconstreadlinerequire(readline);functionsolve(arr){// 从左到右解析 TLVpos 表示当前 tag 的位置consttagsnewSet();letpos0;while(posarr.length){// 每个 TLV 至少需要 tag 和 length 两个元素if(pos1arr.length){return0;}constlengtharr[pos1];// length 必须大于 0if(length0){return0;}// 计算补齐到 4 的倍数后的 TLV 实际长度constrawSize2length;constpaddedSizeMath.floor((rawSize3)/4)*4;if(pospaddedSizearr.length){return0;}// 当前 TLV 占用范围内所有元素都必须合法for(letipos;ipospaddedSize;i){if(arr[i]0||arr[i]99){return0;}}tags.add(arr[pos]);pospaddedSize;}returntags.size;}constrlreadline.createInterface({input:process.stdin,output:process.stdout,terminal:false});constlines[];rl.on(line,(line)lines.push(line));rl.on(close,(){constinputlines.length0?lines[0].trim():;constarrinput?[]:input.split(,).map((item)Number(item.trim()));console.log(solve(arr));});C#includeiostream#includeset#includesstream#includestring#includevectorusingnamespacestd;intsolve(constvectorintarr){// 顺序扫描数组pos 始终表示当前 TLV 的 tag 位置intnstatic_castint(arr.size());intpos0;setinttags;while(posn){// 当前 TLV 至少包含 tag 和 lengthif(pos1n){return0;}intlengtharr[pos1];// length 必须为正数if(length0){return0;}// TLV 原始长度补齐到 4 的倍数后才是实际占位长度intrawSize2length;intpaddedSize(rawSize3)/4*4;if(pospaddedSizen){return0;}// 检查 tag、length、value 和补齐元素是否都在 0 到 99 之间for(intipos;ipospaddedSize;i){if(arr[i]0||arr[i]99){return0;}}tags.insert(arr[pos]);pospaddedSize;}returnstatic_castint(tags.size());}intmain(){string input;getline(cin,input);vectorintarr;stringstreamss(input);string item;while(getline(ss,item,,)){if(!item.empty()){arr.push_back(stoi(item));}}coutsolve(arr)endl;return0;}Gopackagemainimport(bufiofmtosstrconvstrings)funcsolve(arr[]int)int{// 从数组起点开始逐个解析 TLVpos:0tags:make(map[int]bool)forposlen(arr){// 每个 TLV 至少要有 tag 和 lengthifpos1len(arr){return0}length:arr[pos1]// length 必须大于 0iflength0{return0}// 计算补齐到 4 的倍数后的实际 TLV 长度rawSize:2length paddedSize:(rawSize3)/4*4ifpospaddedSizelen(arr){return0}// 当前 TLV 占用的所有数组元素都必须在 0 到 99 之间fori:pos;ipospaddedSize;i{ifarr[i]0||arr[i]99{return0}}tags[arr[pos]]truepospaddedSize}returnlen(tags)}funcmain(){scanner:bufio.NewScanner(os.Stdin)input:ifscanner.Scan(){inputstrings.TrimSpace(scanner.Text())}arr:make([]int,0)ifinput!{for_,part:rangestrings.Split(input,,){value,_:strconv.Atoi(strings.TrimSpace(part))arrappend(arr,value)}}fmt.Println(solve(arr))}C语言#includectype.h#includestdio.h#includestdlib.h#includestring.hintsolve(intarr[],intn){// 从左到右解析 TLVpos 指向当前 tagintpos0;intseen[100]{0};intcount0;while(posn){// 当前 TLV 至少需要 tag 和 lengthif(pos1n){return0;}intlengtharr[pos1];// length 必须大于 0if(length0){return0;}// 计算补齐到 4 的倍数后的实际占位长度intrawSize2length;intpaddedSize(rawSize3)/4*4;if(pospaddedSizen){return0;}// 当前 TLV 占用范围内的所有元素都必须在 0 到 99 之间for(intipos;ipospaddedSize;i){if(arr[i]0||arr[i]99){return0;}}if(!seen[arr[pos]]){seen[arr[pos]]1;count;}pospaddedSize;}returncount;}intmain(){charinput[50000];if(fgets(input,sizeof(input),stdin)NULL){input[0]\0;}intarr[10005];intn0;char*tokenstrtok(input,,);while(token!NULL){while(isspace((unsignedchar)*token)){token;}if(*token!\0){arr[n]atoi(token);}tokenstrtok(NULL,,);}printf(%d\n,solve(arr,n));return0;}完整用例用例12,1,3,0,3,1,3,0,0用例22,1,3,0,3,1,3,0用例35,2,7,8用例41,1,9,0,1,2,8,7,2,1,6,0用例54,3,1,2,3,0,0,0,6,1,7,0用例69,5,1,2,3,4,5,0,9,1,8,0用例71,0,5,0用例82,1,3,100用例92,1,-3,0用例100,1,1,0,99,2,1,2,15,4,1,2,3,4,0,0,50,1,9,0文章目录不同Tag类型统计题目描述输入描述输出描述示例1示例2解题思路核心思想算法步骤复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10

相关新闻

多智能体协同AI图像翻译系统:跨境电商图片本地化解决方案

多智能体协同AI图像翻译系统:跨境电商图片本地化解决方案

1. 项目概述:多智能体协同的AI图像翻译系统 在跨境电商运营中,产品图片的本地化处理一直是个令人头疼的问题。传统做法需要人工团队协作:翻译负责文案转换,美工处理图片修复,设计师调整版式布局。整个过程耗时费力&…

2026/7/27 22:44:10 阅读更多 →
AI在电商内容生成与评价分析中的实践应用

AI在电商内容生成与评价分析中的实践应用

1. 电商内容生产的痛点与AI破局之道 电商行业正面临前所未有的"内容焦虑"。以某头部生鲜电商平台为例,其商品库中仅水果品类就超过2000种,每个SKU需要至少5种不同风格的描述文案(详情页、促销弹窗、社交媒体推广等)。传…

2026/7/27 22:44:10 阅读更多 →
深度解析Alfred工作流集合:构建高效Mac自动化生态

深度解析Alfred工作流集合:构建高效Mac自动化生态

深度解析Alfred工作流集合:构建高效Mac自动化生态 【免费下载链接】favoritesWorkflow4Alfred 项目地址: https://gitcode.com/GitHub_Trending/fa/favoritesWorkflow4Alfred favoritesWorkflow4Alfred是一个面向Mac用户的Alfred工作流精选集合,…

2026/7/27 22:44:10 阅读更多 →

最新新闻

北极野火对土壤有机碳的影响及遥感监测技术

北极野火对土壤有机碳的影响及遥感监测技术

1. 项目背景与核心价值 ABoVE(北极-北方脆弱性实验)是由NASA主导的大型跨学科研究计划,旨在理解气候变化对北极和北方地区生态系统的影响。这项针对加拿大西北地区土壤有机质燃烧严重程度的研究,选取了2014-2015年这个关键时间窗口…

2026/7/27 22:53:14 阅读更多 →
LangChain Chain链实战:构建高效AI写作流水线

LangChain Chain链实战:构建高效AI写作流水线

1. 项目概述:LangChain Chain链实战解析 在自然语言处理领域,构建高效、可扩展的AI应用流水线一直是开发者面临的挑战。LangChain框架提供的Chain链组件,就像一条精密的工业流水线,将各个处理环节有机串联。最近我在开发一个AI辅助…

2026/7/27 22:53:14 阅读更多 →
如何识别高质量.org域名AI学习网站:从AI垃圾到优质资源的筛选指南

如何识别高质量.org域名AI学习网站:从AI垃圾到优质资源的筛选指南

在AI学习资源泛滥的今天,你是否也遇到过这样的困惑:打开一个看似专业的AI学习网站,内容却是东拼西凑的"AI垃圾"(AI slop)?特别是那些顶着.org域名的网站,往往让人误以为是权威机构&am…

2026/7/27 22:53:14 阅读更多 →
Linux下Live555编译安装与RTSP流媒体开发实践指南

Linux下Live555编译安装与RTSP流媒体开发实践指南

1. 项目概述:为什么要在Linux上折腾Live555? 如果你正在处理音视频流媒体,尤其是涉及到摄像头、网络监控、或者自己搭建一个流媒体服务器,那么“RTSP”这个词对你来说肯定不陌生。RTSP,实时流传输协议,就像…

2026/7/27 22:53:14 阅读更多 →
TeslaMate深度技术解析:架构设计与高性能数据采集系统

TeslaMate深度技术解析:架构设计与高性能数据采集系统

TeslaMate深度技术解析:架构设计与高性能数据采集系统 【免费下载链接】teslamate A self-hosted data logger for your Tesla 🚘 [main maintainerJakobLichterfeld] 项目地址: https://gitcode.com/GitHub_Trending/te/teslamate TeslaMate作为…

2026/7/27 22:53:14 阅读更多 →
深度解析:当苹果AI遇上千问大模型——端侧智能的技术突围与生态融合

深度解析:当苹果AI遇上千问大模型——端侧智能的技术突围与生态融合

深度解析:当苹果AI遇上千问大模型——端侧智能的技术突围与生态融合 近日,"苹果AI 千问"这一关键词悄然登上了微博热搜榜单,引发了技术圈的广泛热议。这不仅仅是一次简单的商业合作传闻,更被业界视为移动端AI算力与云端…

2026/7/27 22:52:13 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻