)
不同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。2026 华为OD机试真题 7月22日华为OD上机新系统考试真题 100 分题型输入描述数组元素不超过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