java - 子矩形的数量
问题描述
我在java中有一个m * n 2D数组,使得这个数组的一些元素等于1,一些元素等于0。我想找到这个二维数组的子矩形的数量,其中 k 区域仅由零组成。我应该怎么办?
例如对于下面的数组,这个 2D 数组的子矩形数量为 11,其中区域 2 仅由零组成。
1 0 0 0 1 0 0 0
0 1 0 1 0 1 0 1
0 0 1 0 0 0 1 0
我的想法是计算所有面积为 k 的子矩形,然后省略包含 1 的子矩形,但我发现这很困难。
解决方案
countSubRectangles
计算height
x 个width
矩形。
static boolean areAllZeros(int[][] matrix, int top, int left, int height, int width) {
int maxHeight = matrix.length;
int maxWidth = matrix[0].length;
int bottom = top + height;
int right = left + width;
if (bottom > maxHeight || right > maxWidth)
return false;
for (int i = top; i < bottom; ++i)
for (int j = left; j < right; ++j)
if (matrix[i][j] != 0)
return false;
return true;
}
static int countSubRectangles(int[][] matrix, int height, int width) {
int maxHeight = matrix.length;
int maxWidth = matrix[0].length;
int count = 0;
for (int i = 0; i < maxHeight; ++i)
for (int j = 0; j < maxWidth; ++j)
if (areAllZeros(matrix, i, j, height, width))
++count;
return count;
}
和
int[][] matrix = {
{1, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 1, 0, 1, 0, 1},
{0, 0, 1, 0, 0, 0, 1, 0},
};
System.out.println(
countSubRectangles(matrix, 1, 2) // count 1x2 sub rectangles
+ countSubRectangles(matrix, 2, 1)); // count 2x1 sub rectangles
// -> 11
推荐阅读
- linux - 如何在 Linux 中创建与静态链接位置无关的可执行 ELF?
- python - Python TypeError:找不到所需的参数'offset'(位置1)
- java - 字符串列表的最佳 Vaadin 组件
- spring-boot - 使用业务实体的自然 ID 作为主键
- postgresql - 在 postgres 中使用表标识的最后一个值重置标识列
- java - 如何修复“应用程序崩溃并在 mAuth = FirebaseAuth.getInstance(); 上出错”
- python - Pandas fillna() 不适用于 DataFrame 切片
- python - 我怎样才能进入这个类的角度?
- php - One button working, other button gives error of: "Notice: Undefined index: dbconfig.php on line 6"
- python-3.x - Python selenium select option from dropdown