Получение неправильной подматрицы из матрицы с ошибкой -1 - PullRequest
2 голосов
/ 30 апреля 2020

Я пытаюсь найти субматрицу максимальной суммы размера k из матрицы 2d.

Я все правильно реализовал, но все равно получаю:

индекс вне границ -1 исключение

Идея, которой я придерживаюсь для этой вещи, следующая:

  1. Предварительная обработка исходной матрицы в pre_processes[][], поэтому что я могу найти sm в постоянное время.

  2. Начните с индекса k-1 для строки и столбца, если любой из них row-k или col-k больше 0, вычтите это из текущую сумму, если оба больше, добавьте их объединение, которое будет в pre_processes[row-1][column-1]

Код:

public int max_sum(int[][] image,int k ){
    int[][] pre_processed = new int[image.length][image[0].length];
    pre_processed[0][0] = image[0][0];
    for (int row = 1;row < image.length-k+1;row++){
        pre_processed[row][0] += image[row][0] + pre_processed[row-1][0];
    }

    for (int column = 1;column < image.length-k+1;column++){
        pre_processed[0][column] += image[0][column] + pre_processed[0][column-1];
    }

    for (int rows = 1;rows < image.length;rows++){
        for (int columns = 1;columns < image[0].length;columns++){
            pre_processed[rows][columns] = pre_processed[rows-1][columns]+pre_processed[rows][columns-1]+
                                           image[rows][columns]-pre_processed[rows-1][columns];
        }
    }

    int total,brightness = Integer.MIN_VALUE;

    for (int row_2 = k-1;row_2 < image.length;row_2++){
        for (int col_2 = k-1;col_2 < image[0].length;col_2++){

            total = pre_processed[row_2][col_2];
            if (row_2-k > 0)
                total -= pre_processed[row_2-k][col_2];
            if (col_2-k > 0)
                total -= pre_processed[row_2][col_2-k];
            if (row_2-k > 0 && col_2-k > 0)
                total += pre_processed[row_2-1][col_2-1];
            if (total > brightness)
                brightness = total;
        }
    }

    return brightness;
}

public static void main(String[] args){
    int[][] image = {
        {2 ,  3,   4, 10, 12},
        {20 , 30, 14, 11, 13},
        {29 , 39, 40, 12, 24},
        {40 , 39, 39, 15, 35},
        {100 ,23, 24, 60, 80}
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...