【华为OD机试真题 双机位A卷】918、TLV解析 Ⅱ | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)


订阅本专栏后即可解锁在线OJ刷题权限
 
🍂专栏介绍: 最新的华为OD机试题目总结,使用C++、Java、Python、C语言、JS五种语言进行解答,每个题目的思路分析都非常详细,支持在线OJ评测刷题!!!!订阅后获取权限,新增图解思路,问题解疑,多样例测试,超过百字的思路参考解析,持续更新,代码仅供学习参考
 
题库学习: 华为OD技术面试手撕真题


一、题目


🎃题目描述

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag, length, valueOffset)列表。
 
具体要求如下:
(1)消息包中多组tag、length、 value紧密排列, 其中tag,length各 占1字节(uint8__t) , value所占字节数等于length的值
 
(2)结果数组中tag值已知,需要填充每个tag对应数据的length和valueOffset值(valueffset为value在原消息包中的起始偏

### 华为OD真题及答案解析 以下是一些典型的华为OD题目及其解析,涵盖不同类型的算法和逻辑问题。这些问题基于引用内容以及常见的考点进行整理。 --- #### 1. **TLV解析** TLV(Type-Length-Value)是一种数据编码格式,常用于网络协议中。在华为OD中,可能会要求实现TLV解析功能。 **题目描述** 给定一个字符串表示的TLV序列,解析出其中的所有字段,并输出解析结果。每个字段由Type、Length和Value三部分组成[^1]。 **代码示例** ```go package main import ( "fmt" ) func tlvParse(data []byte) [][]byte { var result [][]byte for len(data) > 0 { if len(data) < 3 { break } t := data[0] l := int(data[1]) if len(data) < 2+l { break } v := data[2 : 2+l] result = append(result, v) data = data[2+l:] } return result } func main() { data := []byte{1, 5, 'H', 'e', 'l', 'l', 'o', 2, 3, 'G', 'o', '!' } parsed := tlvParse(data) for _, v := range parsed { fmt.Println(string(v)) } } ``` --- #### 2. **最大报酬问题** 这是一个经典的动态规划问题,通常以“最大报酬”形式出现。 **题目描述** 给定一系列工作,每份工作有对应的时长和报酬。在总时长限制T内,选择一些工作使得总报酬最大化[^2]。 **代码示例** ```python def max_reward(jobs, T): dp = [0] * (T + 1) for job in jobs: time, reward = job for t in range(T, time - 1, -1): dp[t] = max(dp[t], dp[t - time] + reward) return dp[T] # 示例输入 jobs = [(2, 50), (3, 70), (4, 90)] T = 5 print(max_reward(jobs, T)) # 输出:120 ``` --- #### 3. **数大雁问题** 该问题要求统计字符串中“quack”叫声的数量。 **题目描述** 给定一个字符串,只包含字符‘q’, ‘u’, ‘a’, ‘c’, ‘k’,统计其中完整的“quack”叫声数量[^3]。 **代码示例** ```python def count_quack(s): pattern = "quack" count = [0] * 5 result = 0 for c in s: if c == 'q': if count[4] > 0: count[4] -= 1 result += 1 count[0] += 1 elif c in pattern: idx = pattern.index(c) if count[idx - 1] > 0: count[idx - 1] -= 1 count[idx] += 1 if any(count[:4]): return -1 return result # 示例输入 s = "quackquack" print(count_quack(s)) # 输出:2 ``` --- #### 4. **补种未成活胡杨** 该问题涉及数组操作和贪心算法。 **题目描述** 给定N棵胡杨树的状态,其中有M棵未成活,最多可以补种K棵胡杨树。计算最终存活的胡杨树数量[^4]。 **代码示例** ```python def resupply_resurrection_trees(N, M, deadTrees, K): deadTrees = set(deadTrees) res = N - M for i in range(1, N + 1): if i in deadTrees and K > 0: res += 1 K -= 1 return res # 示例输入 N, M, K = 5, 2, 1 deadTrees = [2, 4] print(resupply_resurrection_trees(N, M, deadTrees, K)) # 输出:4 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KJ.JK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值