我需要一个返回true的代码,如果一个矩阵的所有元素都是从高到低排序的

hm2xizp9  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(629)

我需要一个返回true的代码,如果一个矩阵的所有元素都是从高到低排序的,我的意思是,如果一个矩阵的所有元素都是降序的,比如3-2-1,它应该返回true,如果3-1-2它应该返回false。如果矩阵是空的,那么它应该返回true。在任何其他情况下,它都应该返回false。矩阵是通过这个测试形成的。

@Test
    public void testSortedDescendantMatrixRows() {
        FirstSteps firstSteps = new FirstSteps();
        int[][] matrix1 = {{3, 2, 1}, {5, 4, 3}, {8, 7, 6}};
        assertTrue(firstSteps.isSortedDescendant(matrix1));
        int[][] matrix2 = {{3, 2, 2}, {5, 4, 3}, {8, 7, 6}};
        assertFalse(firstSteps.isSortedDescendant(matrix2));
        int[][] matrix3 = {{3, 2, 1}};
        assertTrue(firstSteps.isSortedDescendant(matrix3));
        int[][] matrix4 = {{}};
        assertTrue(firstSteps.isSortedDescendant(matrix4));
        int[][] matrix5 = {{5, 4, 3, 2, 1}, {12, 5, 4, 3}, {34, 12, 10, 9, 8, 7, 6}};
        assertTrue(firstSteps.isSortedDescendant(matrix5));
    }

我的密码是

public boolean isSortedDescendant(int[][] matrix) {
        if ((matrix.length == 0) || (matrix.length == 1)) {
            return true;
        } else {
            for (int i = 0; i < matrix.length - 1; i++) {
                for (int j = 0; j < matrix.length - 1; j++) {
                    if (matrix[i][j] <= matrix[i + 1][j + 1]) {
                        return false;
                    }
                }
            }
        }
        return true;
    }

代码返回了错误的答案。

xkrw2x1b

xkrw2x1b1#

根据您的测试用例,我认为您需要检查每一行是否已排序。
这些是变化
这个 i < matrix.length - 1i < matrix.length 检查所有行。
这个 matrix[i][j] <= matrix[i + 1][j + 1]matrix[i][j] <= matrix[i][j + 1] 比较同一行的元素。
这个 j < matrix.length - 1j < matrix[i].length - 1 . 即使矩阵不是方阵,它也能保证逻辑工作

public boolean isSortedDescendant(int[][] matrix) {
    if ((matrix.length == 0) || (matrix.length == 1)) {
        return true;
    } else {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length - 1; j++) {
                if (matrix[i][j] <= matrix[i][j + 1]) {
                    return false;
                }
            }
        }
    }
    return true;
}

有一种更简单的方法来编写上述逻辑

public boolean isSortedDescendant(int matrix[][]) {
    for(int[] row: matrix)
        for(int i = 1; i < row.length; i++)
            if(row[i] >= row[i-1])
                return false;

    return true;
}

相关问题