Java Program to Count All Sorted Rows in A Matrix

2025年5月2日 | 阅读3分钟

问题陈述

任务要求是计算给定矩阵中所有升序或降序排列的行。如果一行中的所有元素都遵循既非递减(升序)也非递增的模式,则该行被视为已排序。

例如,[1,2,3,4] 是升序排列。另一方面,[4,3,2,1] 是降序排列。[4,2,3,1] 既不是降序也不是升序。

问题解决方案

为了解决这个问题,我们将

  1. 逐一检查 矩阵 的每一行。
  2. 验证该行是否按降序或升序排列。
  3. 跟踪所有满足排序标准的行(降序或升序)。
  4. 返回总数。

方法论解释

我们需要定义一个接收矩阵作为输入的方法。将检查每一行是否为升序或降序。如果一行符合任一条件,我们就增加计数器。如果每个后续元素组合的后者大于或等于前者,则该行按升序排序。当两个元素相等或其中一个小于另一个时,该行按降序排列。

文件名:SortedRowsCounter.java

输出

 
Number of sorted rows: 3   

解释

我们定义了两个方法 isSortedAsc() 和 isSortedDesc(),每个方法接收一个整数 数组 作为输入。通过遍历行并检查相邻的元素,这些方法分别确认输入行是否按升序或降序排序。

isSortedAsc() 方法如果在任何元素大于下一个元素时返回 false,这意味着该行不是升序排序的;否则,它返回 true。同样,如果任何元素小于下一个元素,isSortedDesc() 函数返回 false,表明该行不是降序排列。

main() 方法 countSortedRows() 迭代矩阵中的每一行并使用这两个方法。如果一行按任一顺序排序,它就会增加 sortedRowCount() 的计数。在主方法中运行对示例矩阵的检查后,通过简单的打印语句显示结果。

第一行按升序排列,第二行既非降序也非升序,第三行按降序排列,第四行按升序排列。

复杂度分析

时间复杂度

该算法遍历矩阵中的每一行并检查每行的排序条件。因此,对于一个有 m 行 n 列的矩阵:检查单行是否按升序或降序排列的复杂度为 O(n)。总复杂度为 O(m * n)。

空间复杂度

由于只为 sortedRowCount() 等变量需要恒定的额外空间,因此空间使用量为 O(1)。

结论

该解决方案使用简单的迭代检查有效地计算了按升序或降序排序的行。对于中等大小的矩阵,该算法是可行的,因为其效率随矩阵大小线性扩展。这种简单的方法在强调可读性和清晰度的同时,实现了预期的功能。