给定0和1的二进制矩阵。找到1的最长序列(按行或按列)。爪哇

时间:2019-05-04 17:43:58

标签: java algorithm

给出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;
    }
}

1 个答案:

答案 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。然后它打破了。它会一直以这种方式检查列,然后移至右边的列。