Dada una array cuadrada 2D de tamaño NXN , la tarea es contar el número de montañas en la array.
Se dice que un elemento en una array es una montaña cuando todos los elementos que lo rodean (en las 8 direcciones) son más pequeños que el elemento dado.
Ejemplos:
Input: matrix = { { 4, 5, 6 }, { 2, 1, 3 }, { 7, 8, 9 } } Output: 1 Explanation Only mountain element = 9. All the neighbouring elements 1, 3 and 8 are smaller than 9. Input: matrix = { { 7, 8, 9 }, { 1, 2, 3 }, { 4, 5, 6 } } Output: 2 Explanation Mountain elements = 6 (2, 3 and 5) and 9 (8, 2, and 3)
Enfoque: La idea es iterar a través de la array y al mismo tiempo verificar los elementos vecinos en las 8 direcciones posibles. Si el elemento es mayor que todos ellos, incremente la variable contador. Finalmente, devuelve el contador.
- Cree una array auxiliar de tamaño (N + 2) X (N + 2) .
- Rellene todos los elementos del borde con el valor INT_MIN
- En el espacio de array restante de NXN , copie la array original
- Ahora verifica si un elemento es mayor que los elementos en las 8 direcciones.
- Cuente el número de tales elementos e imprímalo.
Por ejemplo:
If matrix = { { 7, 8, 9 }, { 1, 2, 3 }, { 4, 5, 6 } } The auxiliary array would be { { 0, 0, 0, 0, 0 }, { 0, 7, 8, 9, 0 }, { 0, 1, 2, 3, 0 }, { 0, 4, 5, 6, 0 }, { 0, 0, 0, 0, 0 } }
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program find the count of // mountains in a given Matrix #include <bits/stdc++.h> using namespace std; const int MAX = 100; // Function to count number of mountains // in a given matrix of size n int countMountains(int a[][MAX], int n) { int A[n + 2][n + 2]; int count = 0; // form another matrix with one extra // layer of border elements. Border // elements will contain INT_MIN value. for (int i = 0; i < n + 2; i++) { for (int j = 0; j < n + 2; j++) { if ((i == 0) || (j == 0) || (i == n + 1) || (j == n + 1)) { // For border elements, // set value as INT_MIN A[i][j] = INT_MIN; } else { // For rest elements, just copy // it into new matrix A[i][j] = a[i - 1][j - 1]; } } } // Check for mountains in the modified matrix for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { // check for all directions if ((A[i][j] > A[i - 1][j]) && (A[i][j] > A[i + 1][j]) && (A[i][j] > A[i][j - 1]) && (A[i][j] > A[i][j + 1]) && (A[i][j] > A[i - 1][j - 1]) && (A[i][j] > A[i + 1][j + 1]) && (A[i][j] > A[i - 1][j + 1]) && (A[i][j] > A[i + 1][j - 1])) { count++; } } } return count; } // Driver code int main() { int a[][MAX] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int n = 3; cout << countMountains(a, n); return 0; }
Java
// Java program find the count of // mountains in a given Matrix import java.util.*; class GFG{ static int MAX = 100; // Function to count number of mountains // in a given matrix of size n static int countMountains(int a[][], int n) { int [][]A = new int[n + 2][n + 2]; int count = 0; // form another matrix with one extra // layer of border elements. Border // elements will contain Integer.MIN_VALUE value. for (int i = 0; i < n + 2; i++) { for (int j = 0; j < n + 2; j++) { if ((i == 0) || (j == 0) || (i == n + 1) || (j == n + 1)) { // For border elements, // set value as Integer.MIN_VALUE A[i][j] = Integer.MIN_VALUE; } else { // For rest elements, just copy // it into new matrix A[i][j] = a[i - 1][j - 1]; } } } // Check for mountains in the modified matrix for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { // check for all directions if ((A[i][j] > A[i - 1][j]) && (A[i][j] > A[i + 1][j]) && (A[i][j] > A[i][j - 1]) && (A[i][j] > A[i][j + 1]) && (A[i][j] > A[i - 1][j - 1]) && (A[i][j] > A[i + 1][j + 1]) && (A[i][j] > A[i - 1][j + 1]) && (A[i][j] > A[i + 1][j - 1])) { count++; } } } return count; } // Driver code public static void main(String[] args) { int a[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int n = 3; System.out.print(countMountains(a, n)); } } // This code is contributed by sapnasingh4991
Python3
# Python3 program find the count of # mountains in a given Matrix MAX = 100 # Function to count number of mountains # in a given matrix of size n def countMountains(a, n): A = [[0 for i in range(n+2)] for i in range(n+2)] count = 0 # form another matrix with one extra # layer of border elements. Border # elements will contain INT_MIN value. for i in range(n+2): for j in range(n+2): if ((i == 0) or (j == 0) or (i == n + 1) or (j == n + 1)): # For border elements, # set value as INT_MIN A[i][j] = float('-inf') else: # For rest elements, just copy # it into new matrix A[i][j] = a[i - 1][j - 1] # Check for mountains in the modified matrix for i in range(n + 1): for j in range(n + 1): if ((A[i][j] > A[i - 1][j]) and (A[i][j] > A[i + 1][j]) and (A[i][j] > A[i][j - 1]) and (A[i][j] > A[i][j + 1]) and (A[i][j] > A[i - 1][j - 1]) and (A[i][j] > A[i + 1][j + 1]) and (A[i][j] > A[i - 1][j + 1]) and (A[i][j] > A[i + 1][j - 1])): count = count + 1 return count # Driver code a = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] n = 3 print(countMountains(a, n)) # This code is contributed by Sanjit_Prasad
C#
// C# program find the count of // mountains in a given Matrix using System; class GFG{ static int MAX = 100; // Function to count number of mountains // in a given matrix of size n static int countMountains(int [,]a, int n) { int [,]A = new int[n + 2,n + 2]; int count = 0; // form another matrix with one extra // layer of border elements. Border // elements will contain Integer.MIN_VALUE value. for (int i = 0; i < n + 2; i++) { for (int j = 0; j < n + 2; j++) { if ((i == 0) || (j == 0) || (i == n + 1) || (j == n + 1)) { // For border elements, // set value as Integer.MIN_VALUE A[i,j] = int.MinValue; } else { // For rest elements, just copy // it into new matrix A[i,j] = a[i - 1,j - 1]; } } } // Check for mountains in the modified matrix for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { // check for all directions if ((A[i,j] > A[i - 1,j]) && (A[i,j] > A[i + 1,j]) && (A[i,j] > A[i,j - 1]) && (A[i,j] > A[i,j + 1]) && (A[i,j] > A[i - 1,j - 1]) && (A[i,j] > A[i + 1,j + 1]) && (A[i,j] > A[i - 1,j + 1]) && (A[i,j] > A[i + 1,j - 1])) { count++; } } } return count; } // Driver code public static void Main(string[] args) { int [,]a = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int n = 3; Console.WriteLine(countMountains(a, n)); } } // This code is contributed by AnkitRai01
Javascript
<script> //Javascript program find the count of // mountains in a given Matrix // Function to count number of mountains // in a given matrix of size n function countMountains(a, n) { var A= new Array(n+2).fill(0).map(() => new Array(n+2).fill(0)); var count = 0; // form another matrix with one extra // layer of border elements. Border // elements will contain INT_MIN value. for (var i = 0; i < n + 2; i++) { for (var j = 0; j < n + 2; j++) { if ((i == 0) || (j == 0) || (i == n + 1) || (j == n + 1)) { // For border elements, // set value as INT_MIN A[i][j] = Number.MIN_VALUE; } else { // For rest elements, just copy // it into new matrix A[i][j] = a[i - 1][j - 1]; } } } // Check for mountains in the modified matrix for (var i = 1; i <= n; i++) { for (var j = 1; j <= n; j++) { // check for all directions if ((A[i][j] > A[i - 1][j]) && (A[i][j] > A[i + 1][j]) && (A[i][j] > A[i][j - 1]) && (A[i][j] > A[i][j + 1]) && (A[i][j] > A[i - 1][j - 1]) && (A[i][j] > A[i + 1][j + 1]) && (A[i][j] > A[i - 1][j + 1]) && (A[i][j] > A[i + 1][j - 1])) { count++; } } } return count; } var a = [[ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]; var n = 3; document.write( countMountains(a, n)); //This code is contributed by SoumikMondal </script>
1
Análisis de rendimiento :
- Complejidad del tiempo : en el enfoque anterior, estamos haciendo dos iteraciones. El primero es sobre (N + 2) X (N + 2) elementos para crear la array auxiliar. El segundo en elementos NXN para encontrar el elemento de montaña real, por lo que la complejidad del tiempo es O(NXN) .
- Complejidad del espacio auxiliar : en el enfoque anterior, estamos usando una array auxiliar de tamaño (N + 2) X (N + 2) , por lo que la complejidad del espacio auxiliar es O(N *N) .
Publicación traducida automáticamente
Artículo escrito por Sanjit_Prasad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA