221. 最大正方形

121 阅读1分钟

221. 最大正方形

类似于

剑指 Offer II 105. 岛屿的最大面积

image.png

  • var dp = new Array(m).fill().map(v => new Array(n).fill(0)) 建模
  • if (arr[i][j] == '1') { 值看arr中为1的项
  • if (i == 0 || j == 0) { 边界处理,自成正方形
  • dp[i][j] = Math.min(...) 最小值具有破坏性,所以需要按照最小值判断
var maximalSquare = function (arr) {
    var res = 0;
    if (arr == null || arr.length == 0 || arr[0].length == 0) return res;
    var m = arr.length, n = arr[0].length;
    var dp = new Array(m).fill().map(v => new Array(n).fill(0))
    for (var i = 0; i < m; i++) {
        for (var j = 0; j < n; j++) {
            if (arr[i][j] == '1') {
                if (i == 0 || j == 0) {
                    dp[i][j] = 1;
                } else {
                    dp[i][j] = Math.min(
                        Math.min(
                            dp[i - 1][j], dp[i][j - 1]
                        ),
                        dp[i - 1][j - 1]
                    ) + 1;
                }
                res = Math.max(res, dp[i][j]);
            }
        }
    }
    var maxSquare = res * res;
    return maxSquare;
};

console.log(maximalSquare([
    ["1", "0", "1", "0", "0"],
    ["1", "0", "1", "1", "1"],
    ["1", "1", "1", "1", "1"],
    ["1", "0", "0", "1", "0"]
]));