2D数组JAVA中指定尺寸的最大子数组

时间:2019-03-16 20:58:57

标签: java matrix multidimensional-array

我试图找到总和最大的子数组左上角的索引。我见过找到最大子数组的算法,但是这些算法不适合我的需求,因为在使用算法之前,我需要设置子数组的尺寸。

/**
 * Finds the rectangle of height h and width w within the band
 * row0 <= row < row0 + h with the most "ink" in it, or the largest sum in it
 * @param int[][] image - A 2d array of light intensity values of each pixel in an image
 * @param h, w - Dimensions of the specified rectangle with height h and width w
 * @param row0 - the index of where it should start constructing rectangles? (I'm not sure)
 * @return The index of the leftmost column of the rectangle
 */
private int findHorzPosition(int[][] image, int row0, int h, int w) {
int maxSum = 0;
int maxRow = 0;
    for(int p = row0; p <= image.length - 1; p++) {
        int[][] tempArr = new int[image.length - row0][image[p].length - 1];
        for(int q = 0; q <= image[p].length - 1; q++) {
            tempArr[p][q] = image[p][q];

            for(int i = 0; i <= tempArr.length - 1; i++) {
                int rowSum = 0;
                for(int j = 0; j <= tempArr[i].length - 1; j++) {
                    rowSum += image[i][j];
                }

                if (rowSum > maxSum) {
                    maxSum = rowSum;
                    maxRow = i;
                }
            }
        }
    }
    return maxRow;
}

这就是我所拥有的,但是我似乎无法使它正常工作。我有什么建议吗?

1 个答案:

答案 0 :(得分:0)

findHorzPosition方法的javadoc说:

  

在带h的带中“墨水”最多或其中最大和的矩形w中查找高度row0 <= row < row0 + h和宽度h的矩形

这意味着波段高row0,即该方法应搜索p行中顶行的矩形。
因此,代码应 具有@return 1 循环

javadoc也说:

  

maxRow矩形最左列的索引

代码返回q。对于矩形,代码应返回值i 1 ,而不是{{1} }表示总和最大的 row


1)变量名没有意义,因此代码难以遵循。具有单字符名称的局部变量仅应在含义明显的情况下使用,例如ij,...表示索引,xyz表示坐标。在您的代码中,pqij不是明显的名称。将q重命名为left,将i重命名为row,并将j重命名为col