📜  计算矩阵中所有已排序的行

📅  最后修改于: 2022-05-13 01:57:22.145000             🧑  作者: Mango

计算矩阵中所有已排序的行

给定一个 m*n 大小的矩阵,任务是计算矩阵中按严格升序或严格降序排序的所有行?
例子 :

Input : m = 4,  n = 5
        mat[m][n] = 1 2 3 4 5
                    4 3 1 2 6
                    8 7 6 5 4
                    5 7 8 9 10
Output: 3 

这个想法很简单,涉及矩阵的两次遍历。
1) 从矩阵的左边开始遍历,统计所有严格递增的行
2)从矩阵的右侧开始遍历,计算所有严格降序的行
下面是上述想法的实现。

C++
// C++ program to find number of sorted rows
#include 
#define MAX 100
using namespace std;
 
// Function to count all sorted rows in a matrix
int sortedCount(int mat[][MAX], int r, int c)
{
    int result = 0; // Initialize result
 
    // Start from left side of matrix to
    // count increasing order rows
    for (int i=0; i0; j--)
            if (mat[i][j-1] <= mat[i][j])
                break;
 
        // Note c > 1 condition is required to make
        // sure that a single column row is not counted
        // twice (Note that a single column row is sorted
        // both in increasing and decreasing order)
        if (c > 1 && j == 0)
            result++;
    }
    return result;
}
 
// Driver program to run the case
int main()
{
    int m = 4, n = 5;
    int mat[][MAX] = {{1, 2, 3, 4, 5},
                      {4, 3, 1, 2, 6},
                      {8, 7, 6, 5, 4},
                      {5, 7, 8, 9, 10}};
    cout << sortedCount(mat, m, n);
    return 0;
}


Java
// Java program to find number of sorted rows
 
class GFG {
     
    static int MAX = 100;
 
    // Function to count all sorted rows in a matrix
    static int sortedCount(int mat[][], int r, int c)
    {
        int result = 0; // Initialize result
 
        // Start from left side of matrix to
        // count increasing order rows
        for (int i = 0; i < r; i++) {
             
            // Check if there is any pair ofs element
            // that are not in increasing order.
            int j;
            for (j = 0; j < c - 1; j++)
                if (mat[i][j + 1] <= mat[i][j])
                    break;
 
            // If the loop didn't break (All elements
            // of current row were in increasing order)
            if (j == c - 1)
                result++;
        }
 
        // Start from right side of matrix to
        // count increasing order rows ( reference
        // to left these are in decreasing order )
        for (int i = 0; i < r; i++) {
             
            // Check if there is any pair ofs element
            // that are not in decreasing order.
            int j;
            for (j = c - 1; j > 0; j--)
                if (mat[i][j - 1] <= mat[i][j])
                    break;
 
            // Note c > 1 condition is required to make
            // sure that a single column row is not counted
            // twice (Note that a single column row is sorted
            // both in increasing and decreasing order)
            if (c > 1 && j == 0)
                result++;
        }
        return result;
    }
     
    // Driver code
    public static void main(String arg[])
    {
        int m = 4, n = 5;
        int mat[][] = { { 1, 2, 3, 4, 5 },
                        { 4, 3, 1, 2, 6 },
                        { 8, 7, 6, 5, 4 },
                        { 5, 7, 8, 9, 10 } };
        System.out.print(sortedCount(mat, m, n));
    }
}
 
// This code is contributed by Anant Agarwal.


Python
# Python3 program to find number
# of sorted rows
def sortedCount(mat, r, c):
     
    result = 0
     
    # Start from left side of matrix to
    # count increasing order rows
    for i in range(r):
         
        # Check if there is any pair ofs element
        # that are not in increasing order.
        j = 0
        for j in range(c - 1):
            if mat[i][j + 1] <= mat[i][j]:
                break
     
        # If the loop didn't break (All elements
        # of current row were in increasing order)
        if j == c - 2:
            result += 1
 
    # Start from right side of matrix to
    # count increasing order rows ( reference
    # to left these are in decreasing order )
    for i in range(0, r):
 
        # Check if there is any pair ofs element
        # that are not in decreasing order.
        j = 0
        for j in range(c - 1, 0, -1):
            if mat[i][j - 1] <= mat[i][j]:
                break
         
        # Note c > 1 condition is required to
        # make sure that a single column row
        # is not counted twice (Note that a
        # single column row is sorted both
        # in increasing and decreasing order)
        if c > 1 and j == 1:
            result += 1
     
    return result    
 
# Driver code
m, n = 4, 5
 
mat = [[1, 2, 3, 4, 5],
       [4, 3, 1, 2, 6],
       [8, 7, 6, 5, 4],
       [5, 7, 8, 9, 10]]
 
print(sortedCount(mat, m, n))
 
# This code is contributed by
# Mohit kumar 29 (IIIT gwalior)


C#
// C# program to find number of sorted rows
using System;
 
class GFG {
     
// static int MAX = 100;
 
    // Function to count all sorted rows in
    // a matrix
    static int sortedCount(int [,]mat, int r,
                                       int c)
    {
        int result = 0; // Initialize result
 
        // Start from left side of matrix to
        // count increasing order rows
        for (int i = 0; i < r; i++) {
             
            // Check if there is any pair of
            // element that are not in
            // increasing order.
            int j;
            for (j = 0; j < c - 1; j++)
                if (mat[i,j + 1] <= mat[i,j])
                    break;
 
            // If the loop didn't break (All
            // elements of current row were
            // in increasing order)
            if (j == c - 1)
                result++;
        }
 
        // Start from right side of matrix
        // to count increasing order rows
        // ( reference to left these are in
        // decreasing order )
        for (int i = 0; i < r; i++) {
             
            // Check if there is any pair
            // ofs element that are not in
            // decreasing order.
            int j;
            for (j = c - 1; j > 0; j--)
                if (mat[i,j - 1] <= mat[i,j])
                    break;
 
            // Note c > 1 condition is
            // required to make sure that a
            // single column row is not
            // counted twice (Note that a
            // single column row is sorted
            // both in increasing and
            // decreasing order)
            if (c > 1 && j == 0)
                result++;
        }
        return result;
    }
     
    // Driver code
    public static void Main()
    {
        int m = 4, n = 5;
        int [,]mat = { { 1, 2, 3, 4, 5 },
                       { 4, 3, 1, 2, 6 },
                       { 8, 7, 6, 5, 4 },
                       { 5, 7, 8, 9, 10 } };
                        
        Console.WriteLine(
                   sortedCount(mat, m, n));
    }
}
 
// This code is contributed by anuj_67.


PHP
 0; $j--)
            if ($mat[$i][$j - 1] <= $mat[$i][$j])
                break;
 
        // Note c > 1 condition is
        // required to make sure that
        // a single column row is not
        // counted twice (Note that a
        // single column row is sorted
        // both in increasing and
        // decreasing order)
        if ($c > 1 && $j == 0)
            $result++;
    }
    return $result;
}
 
// Driver Code
$m = 4; $n = 5;
$mat = array(array(1, 2, 3, 4, 5),
             array(4, 3, 1, 2, 6),
             array(8, 7, 6, 5, 4),
             array(5, 7, 8, 9, 10));
echo sortedCount($mat, $m, $n);
 
// This code is contributed by anuj_67.
?>


Javascript


输出 :

3