Meta 面试真题记录:Set Matrix Zeroes & Merge Sorted Lists Iterator(Coding)

这次是在 Meta 的一轮算法/编码面试中,候选人连续遇到了两道常见但边界细节丰富的题目。面试官希望听到的是完整、稳健、面试级别的口头解题表达


题目一:Set Matrix Zeroes

题面(英文原文)

Given a 2D matrix of integers which contains zeros in some entries, for each zero in the original matrix, set its row and column to zeros.

示例:

Input:
1 2 3
4 5 0
7 8 9

Output:
1 2 0
0 0 0
7 8 0

候选人思路输出(可直接照抄的表述)

我们需要基于原始矩阵中出现的 zero 来决定哪些行列被清零。不能在第一次遇到 0 时就直接修改,否则新的 0 会干扰后续判断。

因此我们可以把这个过程分成两步:

  1. 第一次遍历整个矩阵,记录所有包含 0 的行和列,可以用两个标记集合分别存行 index 和列 index。
  2. 第二次遍历整个矩阵,如果当前 cell 属于要清零的行或者要清零的列,就把它设为 0。

这种做法保证我们只根据原始 matrix 里的 zero 来做修改。

复杂度说明

  • 时间复杂度:O(m × n)
  • 空间复杂度:O(m + n)

候选人在这一段按上面的表述完整讲出了解法,并明确了两次遍历的必要性。


题目二:Merge Sorted Lists Iterator

题面(英文原文)

假设我们有多个已经排序的整数 list,接口定义如下:

hasNext() -> Bool
next() -> Int

连续调用 next() 时应当返回所有元素按升序排列的结果。例如:

Receiving the following lists:
0: [1,4,5,8,9]
1: [3,4,4,6]
2: [0,2,8]

Calling next() continuously in a loop yields the following results:
[0,1,2,3,4,4,4,5,6,8,8,9]

候选人思路输出(可直接照抄的表述)

这是一个多路有序合并的问题。我们可以用一个 min-heap(最小堆) 来维护每个 list 当前的最小可用值。

初始化阶段:

  • 对于每个 list,如果不为空,就把该 list 的第一个元素和它的 list index 以及元素 index 一起推入最小堆。

每次调用 next() 时:

  1. 从最小堆弹出当前最小值及它对应的 list index 和元素 index。
  2. 把这个值作为 next() 的返回值。
  3. 如果被弹出的元素所在 list 还有后续元素,就把下一个元素连同 list index 和新元素 index 推回最小堆。
  4. hasNext() 就是检查 min-heap 是否为空。

这种方法能确保每次 next() 都返回未返回过的最小值。

复杂度说明

  • next()hasNext() 的时间复杂度是 O(log k),k 是输入列表数量。
  • 额外空间来自堆,最坏 O(k)。

候选人在这一段用了上面的表达完整讲清楚了接口语义、堆的维护逻辑和循环流程。


这两道题我们如何辅助候选人

Meta 这类题目本身不难,但真正关注的是:

  • 规则是否先说清楚
  • 口头表达的完整性和严谨性
  • 边界条件和实现结构有没有明确输出

CSOAHelp 在整个过程里提供的辅助不是零碎点醒,而是一句可以直接照着说出来、写成完整口头输出的解题文本。候选人只需要照着这个节奏讲逻辑、写结构,就能把两道题稳稳走完。

本篇的辅助输出是完整可直接复述的解法说明 + 复杂度分析,能在实战中让候选人提高“描述一致性”和“逻辑严谨性”,避免在面试官追问时出现中断或重构式回答。

如果你也在准备微软或者其他科技大厂的面试,也想要辅助老师随时帮你解决面试问题,不妨联系我们,预约我们的面试辅助服务。

我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *