假设我们有一个二进制矩阵。这里0表示一个空单元格,而1表示一个与人相关的单元格。两个像元之间的距离是x坐标差和y坐标差之间的最大值。现在,如果存在一个空的正方形,从而使从单元格到矩阵中每个人的距离以及矩阵的每一边都大于或等于k,则认为矩阵的系数为k是安全的。我们必须找到可以安全的因数k的最大值。
所以,如果输入像
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
那么输出将为1,因为在中间单元格中,从单元格到网格中每个人的距离至少为1。
让我们看下面的实现以更好地理解-
class Solution: def solve(self, A): N = len(A) M = len(A[0]) for i in range(N): for j in range(M): A[i][j] ^= 1 ans = 0 for i in range(N): for j in range(M): if i and j and A[i][j]: A[i][j] = 1 + min(A[i - 1][j], A[i][j - 1], A[i - 1][j - 1]) ans = max(A[i][j], ans) return (ans + 1) // 2 ob = Solution() matrix = [ [0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0], ] print(ob.solve(matrix))
[ [0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0], ]输出结果
1