Calculate Crossing

矩阵中由 1 构成的一横一竖的连续的 1,并且这一横一竖有一个交叉点的,是一条十字路。总的来说对每一个 1: 和他在同一列上,与他相连的的连续的1的数量 + 和同他在同一行上,与他相连的连续的1的数量 的和就是以当前1为交叉点的十字路的长度。找出矩阵中最长的十字路。

举几个例子吧:
0 0 0
1 1 1
1 0 0   
最长的十字路长度是4

0 0 1 0 0 0
0 0 1 1 1 1
1 1 1 0 1 0
0 0 1 0 0 1
最长的十字路长度是7

思路

  • 参考 Bomb Enemy 的思路。我们维持一个 row 和一个 col[]。当之前的元素为 0 的时候,我们需要对 row 和 col[] 进行重新计算,遍历整个数组,得到最大值。

  • 记得减去一,因为交叉点计算了两次。

复杂度

  • Time: O(m * n)

  • Space: O(n),只维持了 col[]

Last updated

Was this helpful?