Самый большой подмассив указанных размеров в 2-мерном массиве JAVA - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь найти индекс верхнего левого угла подмассива с наибольшей суммой. Я видел алгоритмы, которые находят самый большой подмассив, но они не удовлетворяют моим потребностям, потому что мне нужно установить размеры подмассива перед использованием алгоритма.

/**
 * 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 голосов
/ 17 марта 2019

Javadoc метода findHorzPosition говорит:

Находит прямоугольник высотой h и шириной w в пределах полосы row0 <= row < row0 + h с наибольшим количеством «чернил» или самой большой суммой

Это означает, что полоса имеет высоту h, т.е. метод должен искать прямоугольник с верхней строкой в ​​строке row0.
Таким образом, код должен , а не иметь p 1 цикл .

Javadoc также говорит:

@return Индекс самого левого столбца прямоугольника

Код возвращается maxRow. Код должен возвращать значение q 1 для прямоугольника с наибольшей суммой, а не значение i для строки с наибольшей суммой.


1) Имена переменных не имеют смысла, что затрудняет выполнение кода. Локальные переменные с односимвольными именами следует использовать только тогда, когда смысл очевиден, например, i, j, ... для индексов или x, y, z для координат. В вашем коде p, q, i и j не являются очевидными именами. Переименуйте q в left, i в row и j в col.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...