Чтобы найти максимальное число 1 в двумерном массиве

Ниже мой код, чтобы найти индекс строки, которая имеет максимальное количество 1 в отсортированной 2D матрице.

public class RowWithMax1 {

public static void main(String[] args) {

    int a[][]={{0,1,1,1},{1,1,1,1},{0,0,1,1}};
    int rows=0;
    int rowe=a.length-1;
    int cole=a.length;
    int cols=0;
    //System.out.println("len="+a.length);
    int index=0;
    int count[]=new int[a[0].length];
     int k=0;
     int max=0;
    while(rows<=rowe)
    {
        count[k]=0;
        while(a[rows][cole]==1 && cole!=cols)
        {

            count[k]++;
            cole--;
            //System.out.println("cole="+cole);

        }
        System.out.println(k+" "+count[k]);
        if(count[k]>max)
        {
            max=count[k];
            index=k;
        }
        rows++;
        k++;
        cole=a.length;
    }
System.out.println("index"+index);
}

}

Код отлично работает для первой и последней строки, но для второй строки он дает число меньше 1, Например, во втором ряду номер 1 является 4, но код возвращается 3,

2 ответа

Я сделал некоторый рефакторинг, и это работает:

public class RowWithMax1 {

public static void main(String[] args) {

    int a[][]={{0,1,1,1},{1,1,1,1},{0,0,1,1}};
    int rowsLength=a.length;
    System.out.println("rowsLength " + rowsLength);
    int biggestIndex=0;
    int count[]=new int[a[0].length];
    int maxCount=0;

    for(int currentRow=0; currentRow < rowsLength; currentRow++)
    {

        int colsLength=a[currentRow].length;
        System.out.println("Row " + currentRow + " colsLength " + colsLength);
        count[currentRow]=0;

        for(int currentCol=0; currentCol < colsLength; currentCol++)
        {
            if ( a[currentRow][currentCol] == 1)
                count[currentRow]++;

        }
        System.out.println("Row " + currentRow+" has "+count[currentRow] + " x 1");

        if(count[currentRow]>maxCount)
        {
            maxCount=count[currentRow];
            biggestIndex=currentRow;
        }           
    }

    System.out.println("Biggest index "+biggestIndex);
}

}

Потому что вы пропускаете первый элемент, проходя назад в ряду. Пока перерывы, как только cole == cols, Вам лучше использовать цикл for для обхода, а затем выйти из него, когда первое условие станет истинным, или просто изменить границы.

Другие вопросы по тегам