面灵AI→

网易全栈笔试:双人相遇题与 AI Coding 体验

轮次
笔试
时间
2026-09
来源
牛客网

《面试题目》

  1. 两个人需要到达同一个终点,相遇前每回合只能走一步或原地不动,相遇后每回合能走两步或原地不动,求最少回合数;无法到达时返回 -1,题目有多组测试用例
  2. AI Coding:只能测试代码是否能运行,不能跑判题的真实用例

《参考解析》

这道题的正确思路

相遇把过程切成两段,所以别一上来就写四维 BFS。先对整张图做 BFS,求出两人从各自起点到每个格子的最短步数 d1(v)、d2(v),以及每个格子到终点的距离 dT(v)。因为规则允许原地不动,在格子 v 相遇需要 max(d1(v), d2(v)) 个回合(先到的一方等着);相遇后每人每回合能走两格,两人同步,从 v 到终点还要 ceil(dT(v) / 2) 个回合。枚举所有两人都能到达、也能到达终点的 v,取两项之和的最小值就是答案;一个都不存在就返回 -1。

原帖作者的思路方向是对的,只是实现写了 100 多行还没全过。可以反思的点:一是用了四维状态搜索导致状态数爆炸;二是相遇前可以用「原地等待」来对齐回合数,不需要在 BFS 里同时推进两个人;三是相遇后的代价只和到终点的距离有关,不必继续模拟两个人的位置。

别在 -1 上偷懒

作者提到「一看到不能走到终点要返回 -1,就想着直接返回 -1」,但题目是多组测试用例,随便返回 -1 只会在个别用例上蒙对,这就是为什么偷不到分。判断不可达必须真的做连通性检查(BFS 距离为无穷大),而且要意识到「两人各自能到终点」不等于「存在合法的相遇点」——相遇点必须在两人都能到达的连通块里,并且这个格子本身要能走到终点。

语言选择

作者提到暑期实习时网易笔试只能用 C/C++,这次编程题可以用 Java,为此白看了半天 C。笔试前务必确认允许的语言和版本(有没有 Python、Java 是 8 还是 17),输入输出的写法差异很大,用 Scanner 读大量数据会慢,换成 BufferedReader 或自定义快读。

AI Coding 的应对

只能验证是否可运行、看不到真实用例,等于在黑暗里写代码。补偿办法是把自测做足:按题面手写若干组用例(正常、边界、极值、异常),用断言固定预期;再检查输入输出的细节(多组数据的处理、行尾、空行);最后在提交前通读一遍生成的代码,重点看边界和类型转换。作者说自己对笔试已经麻木,但「笔试只是一个流程」这个判断不该影响做法——把能拿的分拿满,后面的环节才有机会。