LeetCode-in-Java

3195. Find the Minimum Area to Cover All Ones I

Medium

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:

Solution

public class Solution {
    public int minimumArea(int[][] grid) {
        int xmin = Integer.MAX_VALUE;
        int xmax = -1;
        int ymin = Integer.MAX_VALUE;
        int ymax = -1;
        for (int i = 0, m = grid.length, n = grid[0].length; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == 1) {
                    xmin = Math.min(xmin, i);
                    xmax = Math.max(xmax, i);
                    ymin = Math.min(ymin, j);
                    ymax = Math.max(ymax, j);
                }
            }
        }
        return (xmax - xmin + 1) * (ymax - ymin + 1);
    }
}