Back to all solutions

#1139 - Largest 1-Bordered Square

Problem Description

Given a 2D grid of 0s and 1s, return the number of elements in the largest square subgrid that has all 1s on its border, or 0 if such a subgrid doesn't exist in the grid.

Solution

/**
 * @param {number[][]} grid
 * @return {number}
 */
var largest1BorderedSquare = function(grid) {
  const rows = grid.length;
  const cols = grid[0].length;
  const left = Array(rows).fill().map(() => Array(cols).fill(0));
  const top = Array(rows).fill().map(() => Array(cols).fill(0));
  let maxSide = 0;

  for (let i = 0; i < rows; i++) {
    for (let j = 0; j < cols; j++) {
      if (grid[i][j]) {
        left[i][j] = j > 0 ? left[i][j - 1] + 1 : 1;
        top[i][j] = i > 0 ? top[i - 1][j] + 1 : 1;

        let side = Math.min(left[i][j], top[i][j]);
        while (side > maxSide) {
          if (left[i - side + 1][j] >= side && top[i][j - side + 1] >= side) {
            maxSide = side;
            break;
          }
          side--;
        }
      }
    }
  }

  return maxSide * maxSide;
};