题目重点:OA 描述某格四邻居中至少两个同色便爆炸,随后空格上方下落;明确参与格、同时清除和单轮/连锁边界。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版 0 表示空格且不参与匹配;对每个非零格,若四邻居中≥2 格同色,就把中心和这些同色邻居一并标记。
- 所有命中以原始矩阵同时判断并清除,再按列重力下落一次;不自动连锁,原题连锁规则未公开。
- 矩阵为矩形,空缺补 0,非零格下落时列内相对顺序保持。
解题路线
- 扫描每个非零格并在界内四邻居中收集同色格;数量≥2 时把中心与邻居写入布尔 mask,不修改原矩阵。
- 整张图扫描后统一清空 mask 标记位置,避免一处早清导致邻近中心的检测结果变化;相邻中心共享格也只清一次。
- 每列从底向上读未清除的非零元素,用 write 指针向下压实,上方填 0。
- 如果面试官要求级联,就重复 scan→clear→gravity 直到没有新 mask;若分数/特殊块另加状态,不能直接用一次扫描。
- 验证水平三连、垂直三连、十字交叉、边角不足两个邻居、同色邻居被多个中心共享、已有 0 和只做一轮与连锁两种结果。
手动走一遍
训练盘面三行 [[0,2,0],[2,2,2],[0,2,0]]:中心 2 有四个同色邻居,五格同时标记并清空;如果扫描到上方 2 时就改原矩阵,会让中心少邻居而漏消。具体题目未明确这组例子。
规模与取舍
R×C 矩阵每格最多看四邻居,标记/下落 O(RC) 时间、O(RC) mask 空间;若 T 轮级联则 O(TRC),每轮至少清一格时 T 有上界。
易错点与追问
容易失分的边界
- 检测时直接把格子清零,后扫描的格子看到改变后的邻域。
- 只清中心而不清符合条件的同色邻居,却未确认原题。
- 把四邻居扩大成八邻居。
- 重力按行横移或改变同列存活顺序。
- 把一次清除和自动连锁当作同一固定题面。
继续深挖
- 只清中心的版本如何改变 mask?
- 要求连锁得分如何终止和累计?
- 有障碍格时列内重力如何分段?
- 是否能在不保存 R×C mask 的情况下仍同时判定?
