Java 需要帮助在较小的2D中迭代“;“子阵列”;在较大的2D阵列中找到

Java 需要帮助在较小的2D中迭代“;“子阵列”;在较大的2D阵列中找到,java,c,arrays,multidimensional-array,2d,Java,C,Arrays,Multidimensional Array,2d,我正在做一个项目,需要在一个较大的2d int数组中找到一些较小的2d int数组 更具体地说,我将提供一个文本文件用于输入。文本文件将包含一个N、M和K值,以及用于填充“大”MxN网格的整数。然后,我需要在较大的MxN网格中找到所有“小”KxK网格,并返回每个KxK网格中最大的int 例如: m=3;n=4;k=2 MxN: 3.4.2 2 3 1 8 3 2 7 8 1 要分析的第一个KxK网格为: 34 2.3 返回4 第二个: 4.2 31 返回4 第三条: 2.3 8.3 返回8 等等

我正在做一个项目,需要在一个较大的2d int数组中找到一些较小的2d int数组

更具体地说,我将提供一个文本文件用于输入。文本文件将包含一个N、M和K值,以及用于填充“大”MxN网格的整数。然后,我需要在较大的MxN网格中找到所有“小”KxK网格,并返回每个KxK网格中最大的int

例如: m=3;n=4;k=2

MxN:
3.4.2
2 3 1
8 3 2
7 8 1

要分析的第一个KxK网格为:
34
2.3
返回4

第二个:
4.2
31
返回4

第三条:
2.3
8.3
返回8

等等等等

有没有一种巧妙的方法可以通过mod操作符或其他什么来迭代这些KxK网格?我觉得有一个简单的解决办法,但我并不清楚

我知道这更像是一个数学问题而不是一个编程问题,但任何帮助都将不胜感激


谢谢。

鉴于K我尝试在这里编写一些代码:

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;
}
private int[]getMaxFromGrids(int k,int[]yourArray){
int m=yourArray.length;//网格高度
int n=yourArray[0].length;//网格的宽度,假设所有内部数组的长度相同!
//参数k是较小网格的大小
//计算使较小网格适应较大网格的最大可能性
int最大可能性=(m-k+1)*(n-k+1);
if(maxPoabilities<1 | | k<1)返回null;
int[]maxValuesSmallGrid=新int[maxPoabilities];
对于(int i=0;i<(最大可能性);i++){
//小网格实际起始元的计算
int colStartElement=i%(n-(k-1));
int rowStartElement=i/(n-(k-1));
//创建更小的网格
int[]smallGrid=newint[k*k];
int o=0;//较小网格的索引
对于(int j=colStartElement;jmax)max=num;
}
返回最大值;
}