6月7日华为OD机考真题+正确做法🔥进来学思路
一星题 1:统计盈利目标区间(前缀和 + 哈希表在线维护)
✅ 正确做法
- 初始化基准:哈希表预先存入
{0:1},单独变量实时滚动记录当前总前缀和,不提前生成完整前缀数组,适配边 add 边查询的在线输入模式。 - 数据追加同步更新:每新增一个盈利数值,立刻累加到滚动前缀和 sum;执行查询时固定最新元素为区间右端点 r,套用变形公式
需要查找的左前缀 = 当前sum - target。 - 哈希快速计数:查询时读取哈希表里匹配数值的出现次数,叠加为合法区间总数;查询结束后,必须把当前 sum 更新存入哈希表,保证下一轮查询数据完整。
- 数值兼容处理:前缀和支持正负超大数值(±1e9),全程依靠哈希 O (1) 查找,杜绝双重循环暴力枚举区间导致超时。
⚠️注意别踩坑
- 公式绝对不能写反:必须是
pre[l] = pre[r] - target,不能写成pre[r] - pre[l] = target反向查找; - 禁止每次查询遍历全数组,严格锁定右端点为刚添加的元素。
一星题 2:提取全部 AGENTS.md 文件 ID(多叉树构建 + 全后代遍历)
✅ 正确做法
- 正向建图:用字典存储父节点→子节点列表,严格区分父子从属关系,杜绝父子键值颠倒;所有目录、文件统一作为树节点,AGENTS.md 标记为目标文件节点。
- 深度遍历捞全后代:选用 DFS 递归遍历,从根目录逐层向下,只要节点的任意后代里存在 AGENTS.md,就把该节点 ID 收集进结果集;递归要穿透所有层级(儿子→孙子→重孙,不止直属一级子节点)。
- 去重 + 升序收尾:遍历过程防止同一 ID 重复入列表;收集完所有符合条件 ID 后,强制做从小到大升序排序,再输出结果。
- 迭代兜底方案:递归深度过大担心栈溢出的话,改用栈模拟迭代式 DFS,逻辑完全一致。
⚠️注意别踩坑
- 不能只遍历直接子节点,多层嵌套文件必须递归深挖;
- 遍历完成后排序步骤不可省略,原生遍历顺序不满足题目输出要求。
二星题:资源隔离分组校验(二分图染色 + 多组独立初始化)
✅ 正确做法
- 无向双向建邻接表:每一组互斥关系 (a,b),邻接表同时添加 a→b、b→a 两条边;读取关系时先判断自环
a==b,一旦出现自环直接标记本组无法划分,跳过染色流程。 - 分组独立初始化:每一组测试用例开始前,清空邻接表、重置 color 染色数组(统一初始化为未染色标记,如 0/-1),绝对不能复用上一组的数组数据。
- 双色染色判定二分图: ① 逐个遍历所有资源节点,遇到未染色节点就启动 BFS/DFS; ② 起点默认染颜色 1,相邻节点强制染对立颜色; ③ 遍历邻接点时,如果邻接点已染色且颜色和当前点一致,判定冲突、分组失败;
- 下标适配转换:题目资源编号从 1 开始,数组下标从 0 起始,存入数组时统一做
编号-1偏移换算,避免数组越界报错。
⚠️注意别踩坑
- 自环是致命冲突,必须前置拦截;
- 冲突关系无向,只存单边邻接表会直接让染色逻辑全线崩盘。