中等
给你一个大小为 m × n 的二维整数矩阵 mat,其中:
mat[r][c] == 1表示位于行r和列c的单元格是可用的。mat[r][c] == 0表示它不可用。
你的任务是找到满足以下条件的 两个子矩阵 :
- 这两个子矩阵都必须是边长为
k的正方形。 - 这两个子矩阵不能共享任何单元格。
- 每个子矩阵只能覆盖
mat[r][c] == 1的单元格。
返回单个正方形的最大可能面积。如果无法选择两个这样的正方形,则返回 0。
一个 子矩阵 (x1, y1, x2, y2) 包括所有满足 x1 <= x <= x2 且 y1 <= y <= y2 的单元格 mat[x][y] 。
示例 1:

输入: mat = [[1,1,1,0],[1,1,1,1],[0,0,1,1]]
输出: 4
解释:
最大且相等的无重叠正方形的边长为 k = 2,面积为 4。
- 第一个正方形从左上角
(0, 0)开始,覆盖单元格(0, 0)、(0, 1)、(1, 0)和(1, 1)。 - 第二个正方形从左上角
(1, 2)开始,覆盖单元格(1, 2)、(1, 3)、(2, 2)和(2, 3)。
因此,答案是 4。
示例 2:

输入: mat = [[0,1],[1,0]]
输出: 1
解释:
最大且相等的无重叠正方形的边长为 k = 1,面积为 1。
- 第一个正方形从左上角
(0, 1)开始,覆盖单元格(0, 1)。 - 第二个正方形从左上角
(1, 0)开始,覆盖单元格(1, 0)。
因此,答案是 1。
示例 3:

输入: mat = [[0,0],[0,1]]
输出: 0
解释:
只有一个可用的单元格,因此无法选择两个无重叠的正方形。因此,答案是 0。
提示:
mat.length == mmat[i].length == n1 <= m, n <= 500mat[i][j]是 0 或 1。