221.最大正方形

最大正方形

在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。

示例 1:

输入:matrix = [[“1”,”0”,”1”,”0”,”0”],[“1”,”0”,”1”,”1”,”1”],[“1”,”1”,”1”,”1”,”1”],[“1”,”0”,”0”,”1”,”0”]]
输出:4

示例 2:

输入:matrix = [[“0”,”1”],[“1”,”0”]]
输出:1

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 300
  • matrix[i][j] 为 ‘0’ 或 ‘1’

解析

dp[i][j] 表示以 (i,j) 为右下角的最大正方形边长。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* @param {character[][]} matrix
* @return {number}
*/
var maximalSquare = function (matrix) {
const m = matrix.length;
const n = matrix[0].length;
const dp = Array.from({ length: m }, () => Array(n).fill(0));
let maxSide = 0;

for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (matrix[i][j] === "1") {
if (i === 0 || j === 0) {
dp[i][j] = 1;
} else {
dp[i][j] =
Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1;
}
maxSide = Math.max(maxSide, dp[i][j]);
}
}
}
return maxSide * maxSide;
};

状态转移的含义:以 (i,j) 为右下角的正方形边长取决于上方、左方、左上方三个位置的最小值加 1。时间复杂度 O(mn)。


221.最大正方形
https://leetcode.lz5z.com/221.maximal-square/
作者
tickli
发布于
2024年7月8日
许可协议