Как вернуть идентификатор столбца, который содержит минимальное значение в 2-D массиве (Java)

1

Я пытаюсь вернуть индекс столбца, который содержит минимальное значение в матрице, но пока я могу только вернуть минимальное значение матрицы и не могу понять, как вернуть этот идентификатор столбца. Если я попытаюсь вернуть "col", это ничего не изменит.

public static int minColIndex (int[][] m) {

        int row = m.length, col = m[0].length; 
        int min = m[0][0]; 
        for (col = 0; col < m.length; col++) {
            for (row = 0; row < m[col].length; row++) {
                if (min > m[col][row]) {
                    min = m[col][row];
                }
            }
        }
        return min; 

    }
Теги:
arrays
multidimensional-array

4 ответа

3
Лучший ответ

В вашем коде значение col всегда будет m.length - 1 после завершения внешнего цикла. Вам нужно сохранить минимальный столбец где-нибудь, например,

public static int minColIndex (int[][] m) {

    int row = m.length, col = m[0].length; 
    int min = m[0][0]; 
    int minCol = 0; // extra variable to store minimumm column
    for (col = 0; col < m.length; col++) {
        for (row = 0; row < m[col].length; row++) {
            if (min > m[col][row]) {
                min = m[col][row];
                minCol = col; // remember the minimum column as well as minimum
            }
        }
    }
    return minCol; // return minimum column, not col

}

Там также нет необходимости в row и col, чтобы иметь начальные значения, установленные перед циклом, так что вы можете изменить первые несколько строк методы будут следующими, чуть большей ясность:

public static int minColIndex (int[][] m) {
    int min = m[0][0]; 
    int minCol = 0; // extra variable to store minimumm column
    for (int col = 0; col < m.length; col++) {
        for (int row = 0; row < m[col].length; row++) {

        ... etc.
  • 0
    я не думаю, что это работает - с такой матрицей, как {{100, 2, 3}, {4, 5, 6}, {7, 8, 9}}, возвращается индекс столбца 0, что неверно
  • 0
    Я думаю, вы не понимаете, какой индекс вы называете "строкой", а какой - "столбцом"
Показать ещё 1 комментарий
0
public static int minColIndex (int[][] m) {
        int row = m.length, col = m[0].length , int index = 0; 
        int min = m[0][0]; 
        for (col = 0; col < m.length; col++) {
            for (row = 0; row < m[col].length; row++) {
                if (min > m[col][row]) {
                    min = m[col][row];
                    index= col;
                }
            }
        }
        return index; 

    }
0

Если (min <m [c] [r]) {
мин = [с] [г];
сохранить = с;
} '

0

Определите эти переменные.

int rowOfMinValue = 0;
int colOfMinValue = 0;

А потом,

Изменить:

if (min > m[col][row]) {
    min = m[col][row];
}

Для того, чтобы:

if (min > m[col][row]) {
    min = m[col][row];

    rowOfMinValue = row;
    colOfMinValue = col;
}

теперь у вас есть минимальные значения строк и столбцов в руке.

Предложение: Вы неправильно указали row и col в матрице. На матрице mxn m и n представляют собой строки и столбцы соответственно. И, следовательно, в матрице m[][] каждая из [] представляет последовательность row и col соответственно в последовательности.

Если значение 6 находится во 2nd row, 4th col, то мы пишем как

row=1; 
col=3; 
value = 6; 
m[ row ][ col ] = value;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню