需要帮助迭代更大的2D数组

时间:2016-04-05 09:34:29

标签: java c arrays multidimensional-array 2d

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

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

所以,例如: m = 3; n = 4; k = 2

M×N个:
3 4 2
2 3 1
8 3 2
7 8 1

要分析的第一个KxK网格将是:
3 4
2 3
返回4;

第二名:
4 2
3 1
返回4;

第3名:
2 3
8 3
返回8;

等等。

是否有一种使用mod运算符或其他东西迭代这些KxK网格的方式?我觉得有一个简单的解决方案,但对我来说并不明显。

我知道这更像是一个数学问题,而不是编程问题,但任何帮助都会受到赞赏。

感谢。

2 个答案:

答案 0 :(得分:1)

我试图在这里写一些代码:

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;
}

答案 1 :(得分:0)

鉴于K <= N&amp;&amp; K <= M,您可以通过将其左上角从0,0移动到N-K,M-K(使用2作为循环)轻松找到所有subarray2d

然后使用K * K subarray2d左上角的坐标并返回其更高的值来执行函数:)