logo

Zählen Sie alle sortierten Zeilen in einer Matrix

Bei einer gegebenen Matrix der Größe m*n besteht die Aufgabe darin, alle Zeilen in einer Matrix zu zählen, die entweder in streng aufsteigender Reihenfolge oder in streng absteigender Reihenfolge sortiert sind?

Beispiele:  

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

Die Idee ist einfach und beinhaltet zwei Durchläufe der Matrix. 



  1. Durchlaufen Sie die Matrix von der linken Seite, um alle darin enthaltenen Zeilen zu zählen streng steigende Ordnung  
  2. Durchlaufen Sie die Matrix von der rechten Seite, um alle darin enthaltenen Zeilen zu zählen streng absteigende Reihenfolge

Nachfolgend finden Sie die Umsetzung der obigen Idee. 

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; 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 of 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 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 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 of 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 of 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 of 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[ij + 1] <= mat[ij])  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   // of element that are not in  // decreasing order.  int j;  for (j = c - 1; j > 0; j--)  if (mat[ij - 1] <= mat[ij])  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. 
JavaScript
<script> // Javascript program to find number of sorted rows    let MAX = 100;    // Function to count all sorted rows in a matrix  function sortedCount(matrc)  {  let result = 0; // Initialize result    // Start from left side of matrix to  // count increasing order rows  for (let i = 0; i < r; i++) {    // Check if there is any pair of element  // that are not in increasing order.  let 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 (let i = 0; i < r; i++) {    // Check if there is any pair of element  // that are not in decreasing order.  let 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   let m = 4 n = 5;    let mat = [[1 2 3 4 5]  [4 3 1 2 6]  [8 7 6 5 4]  [5 7 8 9 10]]  document.write(sortedCount(mat m n))    // This code is contributed by unknown2108 </script> 
PHP
 // PHP program to find  // number of sorted rows $MAX = 100; // Function to count all  // sorted rows in a matrix function sortedCount($mat $r $c) { // Initialize result $result = 0; // Start from left side of // matrix to count increasing  // order rows for ( $i = 0; $i < $r; $i++) { // Check if there is any  // pair of element that  // are not in increasing order. $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 ($i = 0; $i < $r; $i++) { // Check if there is any pair  // of element that are not // in decreasing order. $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 $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. ?> 

Ausgabe
3

Zeitkomplexität: O(m*n) 
Nebenraum: O(1)

Wenn Sie einen anderen optimierten Ansatz zur Lösung dieses Problems haben, teilen Sie ihn bitte in den Kommentaren mit.