Description
You are given a 2D binary array grid
. Find a rectangle with horizontal and vertical sides with the smallest area, such that all the 1's in grid
lie inside this rectangle.
Return the minimum possible area of the rectangle.
Example 1:
Input: grid = [[0,1,0],[1,0,1]]
Output: 6
Explanation:
The smallest rectangle has a height of 2 and a width of 3, so it has an area of 2 * 3 = 6
.
Example 2:
Input: grid = [[1,0],[0,0]]
Output: 1
Explanation:
The smallest rectangle has both height and width 1, so its area is 1 * 1 = 1
.
Constraints:
1 <= grid.length, grid[i].length <= 1000
grid[i][j]
is either 0 or 1.- The input is generated such that there is at least one 1 in
grid
.
Solution
Python3
class Solution:
def minimumArea(self, grid: List[List[int]]) -> int:
rows, cols = len(grid), len(grid[0])
minR, maxR = inf, -inf
minC, maxC = inf, -inf
for i in range(rows):
for j in range(cols):
if grid[i][j] == 1:
minR = min(minR, i)
maxR = max(maxR, i)
minC = min(minC, j)
maxC = max(maxC, j)
return (maxR - minR + 1) * (maxC - minC + 1)