Чтобы найти максимальное число 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 для обхода, а затем выйти из него, когда первое условие станет истинным, или просто изменить границы.