3197. 包含所有 1 的最小矩形面积 II
题目描述
给你一个二维 二进制 数组 grid
。你需要找到 3 个 不重叠、面积 非零 、边在水平方向和竖直方向上的矩形,并且满足 grid
中所有的 1 都在这些矩形的内部。
返回这些矩形面积之和的 最小 可能值。
注意,这些矩形可以相接。
示例 1:
输入: grid = [[1,0,1],[1,1,1]]
输出: 5
解释:
- 位于
(0, 0)
和(1, 0)
的 1 被一个面积为 2 的矩形覆盖。 - 位于
(0, 2)
和(1, 2)
的 1 被一个面积为 2 的矩形覆盖。 - 位于
(1, 1)
的 1 被一个面积为 1 的矩形覆盖。
示例 2:
输入: grid = [[1,0,1,0],[0,1,0,1]]
输出: 5
解释:
- 位于
(0, 0)
和(0, 2)
的 1 被一个面积为 3 的矩形覆盖。 - 位于
(1, 1)
的 1 被一个面积为 1 的矩形覆盖。 - 位于
(1, 3)
的 1 被一个面积为 1 的矩形覆盖。
提示:
1 <= grid.length, grid[i].length <= 30
grid[i][j]
是 0 或 1。- 输入保证
grid
中至少有三个 1 。
解法
方法一:枚举
根据题目描述,我们可以用两条分割线,将矩形分成三个部分,我们分别计算每一部分包含所有 $1$ 的最小矩形面积,然后取三个部分面积之和的最小值。
我们可以枚举两条分割线的位置,共有 $6$ 种情况:
- 两次横向分割
- 两次纵向分割
- 先进行一次横向分割,再对上部分进行一次纵向分割
- 先进行一次横向分割,再对下部分进行一次纵向分割
- 先进行一次纵向分割,再对左部分进行一次横向分割
- 先进行一次纵向分割,再对右部分进行一次横向分割
我们可以用一个函数 $\textit{f}(i_1, j_1, i_2, j_2)$ 来计算矩形 $(i_1, j_1)$ 到 $(i_2, j_2)$ 包含所有 $1$ 的最小矩形面积。
时间复杂度 $O(m^2 \times n^2)$,其中 $m$ 和 $n$ 分别是矩形的行数和列数。空间复杂度 $O(1)$。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|