华为OD机考386分教程!赶紧码住👇
5月24日的华为OD机考,鱼丸的一个候选人拿下386高分!
今天大佬把本场三道原题的考点、坑点、完整解题思路全部拆解出来,备考 OD 机考直接抄作业就行✅
⭐️一星题1️⃣:简单表达式运算
核心考点:8/10/16 进制解析、表达式求值、数值边界截断、8 位按位取反
题目要求:输入字符串如"023+0x21+0o13+1",解析出各进制整数,从左到右加减运算,结果限制在[-255,255],然后转十六进制并按位取反,最后输出0xXX格式(大写,两位)。
解法思路:
- 识别 0x 十六进制、0o 八进制、普通数字十进制,每个数字必须 0~999,超范围直接输出 NA;
- 从左到右顺序加减运算;
- 结果强制截断在 [-255,255] 区间;
- 负数要算补码,低 8 位按位取反,公式记住:
(~res) & 0xFF; - 固定输出 0x 大写两位格式,非法字符、格式错误一律返回 NA。
高频坑点避雷:
❌ 忽略负数取反逻辑
❌ 十六进制输出大小写不规范
❌ 不校验数字 0~999 范围
❌ Python 直接用~取值不与 0xFF 按位与,出现负数异常
⭐️一星题2️⃣:最小请求间隔限流策略
核心考点:子集枚举、回溯 DFS,n≤15 暴力就能过
题目描述:给一组时间戳(乱序、无重复),选出子集,使得任意两个时间差 ≥ minInterval,求合法子集总数(包括空集)。
例:[1,2,4], minInterval=2 → 合法方案:[]、[1]、[2]、[4]、[1,4]、[2,4] 共6种。
解法思路:先排序,再 DFS 回溯,记录当前位置和上一个选中时间,满足间隔就选,不满足就跳过,全局统计总数即可。数据量小不用 DP,纯回溯最简单好写。
⭐️⭐️二星题:优化充电桩调度算法
核心考点:贪心 + 最小堆优先队列模拟
题目描述:N个充电桩,M辆车,每辆车有到达时间AT、充电时间CT、最大可等待时长WT。
规则:车辆到达后,若有空闲桩立即充电;否则等待,但开始充电时间-到达时间 ≤ WT,否则失败。
求充电失败的车辆数。
解法思路:
- 车辆按到达时间升序排序;
- 最小堆维护充电桩空闲释放时间;
- 每次取出最早空闲桩,判断能否在等待时限内开始充电;
- 能充就更新桩空闲时间,不能充直接统计失败车辆数。
备考刷题建议
- 进制表达式计算器专项必刷,重点练负数、非法字符、边界截断;
- n≤15 子集题直接回溯 DFS,不用纠结复杂优化;
- 调度模拟类吃透最小堆,刷会议室 II、最多可参加会议数目同款题型;
- 8 位按位取反死记
(~x) & 0xFF公式,机考直接套用。

查看3道真题和解析