Encuentre el conteo de montañas en una Array dada

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.
 

  1. Cree una array auxiliar de tamaño (N + 2) X (N + 2) .
  2. Rellene todos los elementos del borde con el valor INT_MIN
  3. En el espacio de array restante de NXN , copie la array original
  4. Ahora verifica si un elemento es mayor que los elementos en las 8 direcciones.
  5. 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>
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *