You are given a 2D binary array grid. Find a rectangle with horizontal and vertical sides with thesmallest area, such that all the 1’s in grid
lie inside this rectangle.
Return the minimum possible area of the rectangle.
Input: grid =[[0,1,0],[1,0,1]]Output: 6Explanation:

The smallest rectangle has a height of 2 and a width of 3, so it has an area
of `2 * 3 = 6`.
Input: grid =[[1,0],[0,0]]Output: 1Explanation:

The smallest rectangle has both height and width 1, so its area is`1 * 1 =
1`.
To cover all 1’s in the grid with the smallest rectangle, we need to find the minimum and maximum row and column indices where a 1 appears. The rectangle defined by these bounds will cover all 1’s, and its area is simply the product of its height and width.
classSolution {
publicintminArea(int[][] grid) {
int m = grid.length, n = grid[0].length;
int minr = m, maxr =-1, minc = n, maxc =-1;
for(int i=0;i<m;++i) for(int j=0;j<n;++j) if(grid[i][j]==1) {
minr = Math.min(minr, i); maxr = Math.max(maxr, i);
minc = Math.min(minc, j); maxc = Math.max(maxc, j);
}
if(minr>maxr) return 0;
return (maxr-minr+1)*(maxc-minc+1);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution {
funminArea(grid: Array<IntArray>): Int {
val m = grid.size; val n = grid[0].size
var minr = m; var maxr = -1; var minc = n; var maxc = -1for (i in0 until m) for (j in0 until n) if (grid[i][j]==1) {
minr = minOf(minr, i); maxr = maxOf(maxr, i)
minc = minOf(minc, j); maxc = maxOf(maxc, j)
}
if (minr > maxr) return0return (maxr-minr+1)*(maxc-minc+1)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
classSolution:
defminArea(self, grid: list[list[int]]) -> int:
m, n = len(grid), len(grid[0])
minr, maxr, minc, maxc = m, -1, n, -1for i in range(m):
for j in range(n):
if grid[i][j] ==1:
minr = min(minr, i)
maxr = max(maxr, i)
minc = min(minc, j)
maxc = max(maxc, j)
if minr > maxr:
return0return (maxr-minr+1)*(maxc-minc+1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
impl Solution {
pubfnmin_area(grid: Vec<Vec<i32>>) -> i32 {
let m = grid.len(); let n = grid[0].len();
let (mut minr, mut maxr, mut minc, mut maxc) = (m asi32, -1, n asi32, -1);
for i in0..m {
for j in0..n {
if grid[i][j]==1 {
minr = minr.min(i asi32); maxr = maxr.max(i asi32);
minc = minc.min(j asi32); maxc = maxc.max(j asi32);
}
}
}
if minr > maxr { return0; }
(maxr-minr+1)*(maxc-minc+1)
}
}