less than 1 minute read

Problem Statement

leetcode problem link

Brute Force Approach [Accepted]

class Solution:
    def minimumArea(self, grid: List[List[int]]) -> int:
        res = 0
        ROWS = len(grid)
        COLS = len(grid[0])
        rows = set()
        cols = set()
        for row in range(ROWS):
            for col in range(COLS):
                if grid[row][col] == 1:
                    rows.add(row)
                    cols.add(col)

        smallest_row = min(rows)
        smallest_col = min(cols)
        largest_row = max(rows)
        largest_col = max(cols)

        for row in range(smallest_row, largest_row + 1):
            for col in range(smallest_col, largest_col + 1):
                res += 1

        return res

Editorial

Approach: One-time Traversal

class Solution:
    def minimumArea(self, grid: List[List[int]]) -> int:
        n, m = len(grid), len(grid[0])
        min_i, max_i = n, 0
        min_j, max_j = m, 0

        for i in range(n):
            for j in range(m):
                if grid[i][j] == 1:
                    min_i = min(min_i, i)
                    max_i = max(max_i, i)
                    min_j = min(min_j, j)
                    max_j = max(max_j, j)

        return (max_i - min_i + 1) * (max_j - min_j + 1)