我正在开展一个项目,该项目需要找到包含在较大二维整数数组中的一些较小二维整数数组。
更具体地说,我将获得一个文本文件以供输入。文本文件将包含 N、M 和 K 值,以及填充“大”MxN 网格的整数。然后,我需要在较大的 MxN 网格中找到所有“小”KxK 网格,并返回每个 KxK 网格中的最大整数。
所以,例如: 米 = 3; n = 4; k = 2
MxN:
3 4 2
2 3 1
8 3 2
7 8 1
要分析的第一个 KxK 网格是:
3 4
2 3
返回 4;
第二个:
4 2
3 1
返回 4;
第三个:
2 3
8 3
返回 8;
等等等等
是否有一种巧妙的方法可以使用 mod 运算符或其他方式遍历这些 KxK 网格?我觉得对此有一个简单的解决方案,但对我来说并不明显。
我知道这与其说是编程问题,不如说是数学问题,但我们将不胜感激。
谢谢。
最佳答案
我试着在这里写一些代码:
private int[] getMaxFromGrids(int k, int[][] yourArray){
int m = yourArray.length; //height of grid
int n = yourArray[0].length; //width of grid, assuming that all inner array have same length!
//argument k is size of smaller grid
//computing max possibilities to fit smaller grid to larger one
int maxPossibilities = (m - k + 1) * (n - k + 1);
if(maxPossibilities < 1 || k < 1) return null;
int[] maxValuesSmallGrid = new int[maxPossibilities];
for (int i = 0; i < (maxPossibilities); i++) {
//computing actual start element for small grid
int colStartElement = i % (n - (k - 1));
int rowStartElement = i / (n - (k - 1));
//creating smaller grid
int[] smallGrid = new int[k * k];
int o = 0; //index of smaller grid
for (int j = colStartElement; j < colStartElement + k; j++) {
for (int l = rowStartElement; l < rowStartElement + k; l++) {
smallGrid[o++] = yourArray[j][l];
}
}
maxValuesSmallGrid[i] = getMax(smallGrid);
}
return maxValuesSmallGrid;
}
//method for getting max number from given array
private int getMax(int[] numbers) {
int max = Integer.MIN_VALUE;
for(int num : numbers) {
if(num > max) max = num;
}
return max;
}
关于java - 需要帮助迭代在较大的二维数组中找到的较小的二维 "subarrays",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36422452/