给出0和1的二进制矩阵。找到1的最长序列(按行或按列)。
0 0 0 1 0 0
0 0 1 1 0 0
0 0 0 1 0 0
它应该返回最高计数– 3.帮助。请使用Java编写此程序。我写了一个简单的算法,但是没有考虑序列。
public int columnMaxSequence(int[][] matrix) {
int maxSequence = 0;
int max = 0;
for (int i = 0; i < matrix[0].length; i++) {
for (int j = 0; j < matrix.length; j++) {
if (matrix[j][i] == 1) {
max++;
}
}
if (max > maxSequence) {
maxSequence = max;
}
max = 0;
}
return maxSequence;
}
public int rowMaxSequence(int[][] matrix) {
int maxSequence = 0;
int max = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] == 1) {
max++;
}
}
if (max > maxSequence) {
maxSequence = max;
}
max = 0;
}
return maxSequence;
}
/*
Returns the maximum sequence of 1s in a matrix.
*/
public int maxSequence(int[][] matrix) {
int rowMaxSequence = rowMaxSequence(matrix);
int columnMaxSequence = columnMaxSequence(matrix);
if (rowMaxSequence >= columnMaxSequence) {
return rowMaxSequence;
} else {
return columnMaxSequence;
}
}
答案 0 :(得分:1)
您应该尝试一下:
void main(int[][] matrix)
{
System.out.println(Math.max(columnMaxSequence(matrix), rowMaxSequence(matrix)));
}
public int columnMaxSequence(int[][] matrix)
{
int max = 0;
for(int i = 0; i < matrix[0].length; i++) // Column Index
{
int tempMax = 0;
for(int j = 0; j < matrix.length; j++) // Row Index
{
if(matrix[j][i] == 1)
{
tempMax = 1;
for(int k = j+1; k < matrix.length; k++)
{
if(matrix[k][i] == 1)
tempMax++;
else break;
}
if(max < tempMax)
max = tempMax;
}
}
}
return max;
}
public int rowMaxSequence(int[][] matrix)
{
int max = 0;
for(int i = 0; i < matrix.length; i++)
{
int tempMax = 0;
for(int j = 0; j < matrix[0].length; j++)
{
if(matrix[i][j] == 1)
{
tempMax = 1;
for(int k = j+1; k < matrix[0].length; k++)
{
if(matrix[i][k] == 1)
tempMax++;
else break;
}
if(max < tempMax)
max = tempMax;
}
}
}
return max;
}
对于rowMaxSequence():
循环从矩阵中移出,i
存储每行索引的值。 j
将所有元素的索引存储在行i
中。在(i, j)
处,如果矩阵找到1,则它将计算该行中1的数量,直到找到0-然后中断。它会以相同的方式继续检查该行,并且当orw完成时,它会转到下一行。
对于columnMaxSequence():
循环遍历右边的矩阵,i
是当前列的索引。 j
是该列中的元素。如果(j, i)
为1,则将其下的1计数,直到找到0。然后它打破了。它会一直以这种方式检查列,然后移至右边的列。