Encuentre el máximo de los mínimos de las capas de Matrix usando los números 1 a N ^ 2

Dada una array cuadrada de tamaño N*N usando los números 1 a N^2 , la tarea es encontrar el máximo de los mínimos de cada capa de la array.

Las capas de la array son los elementos de contorno de la subarray que comienzan en (i, i) y terminan en (N – i + 1, N – i + 1), donde 1<= i<= ceil(N/2 ).

Ejemplos:

 Entrada: A continuación se muestra la array dada:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Salida: 6
Explicación: Las capas son {1, 2, 3, 4, 8, 12, 16, 15, 14 , 13, 9, 5} con mínimo 1 y {6, 7, 10, 11} con mínimo 6. El máximo de 1 y 6 es 6.

Entrada: A continuación se muestra la array dada: 
1 2 3
4 30 5
1 2 3
Salida: 30
Explicación: Las capas son {1, 2, 3, 5, 3, 2, 1, 4, 1} con un mínimo de 1 y {30 } con un mínimo de 30. El máximo de 1 y 30 es 30.

 

Enfoque: La idea es observar cuidadosamente, para la i -ésima capa, los elementos del límite superior, izquierdo, derecho e inferior están en índices:

  • el límite superior está en los índices (i, j)
  • el límite izquierdo está en los índices (j, i)
  • el límite derecho está en los índices (j, n – i + 1)
  • el límite inferior está en los índices (n – i + 1, j), donde i <= j <= n – i + 1

Por lo tanto, encuentre los mínimos de cada capa y almacene el máximo de estos mínimos.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
#include<bits/stdc++.h>
using namespace std;
 
// Function to return the minimum
// of the boundary elements
int getBoundaryMin(int a[][4], int n,
                   int index)
{
    int min1 = INT_MAX;
 
    for(int i = index; i < n - index; i++)
    {
         
        // Top boundary
        min1 = min(min1,
                   a[index][i]);
 
        // Left boundary
        min1 = min(min1,
                   a[i][index]);
 
        // Right boundary
        min1 = min(min1,
                    a[i][n - index - 1]);
 
        // Bottom boundary
        min1 = min(min1,
                   a[n - index - 1][i]);
    }
    return min1;
}
 
// Function to find the maximum of
// minimums of all layers
void MaximumOfMinimum(int a[][4], int n)
{
     
    // Calculate the layers
    int layers = n / 2 + n % 2;
    int max1 = INT_MIN;
 
    // Iterate for all the layers
    for(int i = 0; i < layers; i++)
    {
         
        // Find maximum
        max1 = max(max1,
                   getBoundaryMin(a, n, i));
    }
     
    // Print the answer
    cout << (max1);
}
 
// Driver Code
int main()
{
     
    // Initialize the matrix
    int a[][4] = { { 1, 2, 3, 4 },
                   { 5, 6, 7, 8 },
                   { 9, 10, 11, 12 },
                   { 13, 14, 15, 16 } };
 
    int n = sizeof(a) / sizeof(a[0]);
 
    // Function call
    MaximumOfMinimum(a, n);
}
 
// This code is contributed by chitranayal

Java

// Java Program for the above approach
 
class GFG {
 
    // Function to return the minimum
    // of the boundary elements
    static int
    getBoundaryMin(int a[][], int n,
                   int index)
    {
        int min = Integer.MAX_VALUE;
 
        for (int i = index; i < n - index; i++) {
 
            // Top boundary
            min = Math.min(
                min,
                a[index][i]);
 
            // Left boundary
            min = Math.min(
                min,
                a[i][index]);
 
            // Right boundary
            min = Math.min(
                min,
                a[i][n - index - 1]);
 
            // Bottom boundary
            min = Math.min(
                min,
                a[n - index - 1][i]);
        }
 
        return min;
    }
 
    // Function to find the maximum of
    // minimums of all layers
    static void MaximumOfMinimum(
        int a[][], int n)
    {
        // Calculate the layers
        int layers = n / 2 + n % 2;
        int max = Integer.MIN_VALUE;
 
        // Iterate for all the layers
        for (int i = 0; i < layers; i++) {
 
            // Find maximum
            max
                = Math.max(
                    max,
                    getBoundaryMin(a, n, i));
        }
 
        // Print the answer
        System.out.print(max);
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        // Initialize the matrix
        int a[][] = { { 1, 2, 3, 4 },
                      { 5, 6, 7, 8 },
                      { 9, 10, 11, 12 },
                      { 13, 14, 15, 16 } };
 
        int n = a.length;
 
        // Function call
        MaximumOfMinimum(a, n);
    }
}

Python3

# Python3 program for the above approach
import sys
 
# Function to return the minimum
# of the boundary elements
def getBoundaryMin(a, n, index):
     
    min1 = sys.maxsize
 
    for i in range(index, n - index):
         
        # Top boundary
        min1 = min(min1, a[index][i])
 
        # Left boundary
        min1 = min(min1, a[i][index])
 
        # Right boundary
        min1 = min(min1, a[i][n - index - 1])
 
        # Bottom boundary
        min1 = min(min1, a[n - index - 1][i])
     
    return min1
 
# Function to find the maximum of
# minimums of all layers
def MaximumOfMinimum(a, n):
     
    # Calculate the layers
    layers = n // 2 + n % 2
    max1 = -sys.maxsize - 1
 
    # Iterate for all the layers
    for i in range(0, layers):
         
        # Find maximum
        max1 = max(max1, getBoundaryMin(a, n, i))
     
    # Print the answer
    print(max1)
 
# Driver Code
     
# Initialize the matrix
a = [ [ 1, 2, 3, 4 ],
      [ 5, 6, 7, 8 ],
      [ 9, 10, 11, 12 ] ,
      [ 13, 14, 15, 16 ] ]
 
n = len(a)
 
# Function call
MaximumOfMinimum(a, n)
 
# This code is contributed by sanjoy_62

C#

// C# program for the above approach
using System;
 
class GFG{
 
// Function to return the minimum
// of the boundary elements
static int getBoundaryMin(int[,]a, int n,
                          int index)
{
    int min = int.MaxValue;
 
    for(int i = index; i < n - index; i++)
    {
         
        // Top boundary
        min = Math.Min(min, a[index, i]);
 
        // Left boundary
        min = Math.Min(min, a[i, index]);
 
        // Right boundary
        min = Math.Min(min, a[i, n - index - 1]);
 
        // Bottom boundary
        min = Math.Min(min, a[n - index - 1, i]);
    }
    return min;
}
 
// Function to find the maximum of
// minimums of all layers
static void MaximumOfMinimum(int[,]a, int n)
{
     
    // Calculate the layers
    int layers = n / 2 + n % 2;
    int max = int.MinValue;
 
    // Iterate for all the layers
    for(int i = 0; i < layers; i++)
    {
         
        // Find maximum
        max = Math.Max(max,
                       getBoundaryMin(a, n, i));
    }
 
    // Print the answer
    Console.Write(max);
}
 
// Driver Code
public static void Main(String[] args)
{
     
    // Initialize the matrix
    int[,]a = { { 1, 2, 3, 4 },
                { 5, 6, 7, 8 },
                { 9, 10, 11, 12 },
                { 13, 14, 15, 16 } };
 
    int n = a.GetLength(0);
 
    // Function call
    MaximumOfMinimum(a, n);
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// Javascript program for the above approach
 
// Function to return the minimum
// of the boundary elements
function getBoundaryMin(a, n, index)
{
    min1 = 1000000000;
     
    for(var i = index; i < n - index; i++)
    {
         
        // Top boundary
        min1 = Math.min(min1,
        a[index][i]);
         
        // Left boundary
        min1 = Math.min(min1,
        a[i][index]);
         
        // Right boundary
        min1 = Math.min(min1,
        a[i][n - index - 1]);
         
        // Bottom boundary
        min1 = Math.min(min1,
        a[n - index - 1][i]);
    }
    return min1;
}
     
// Function to find the maximum of
// minimums of all layers
function MaximumOfMinimum(a, n)
{
     
    // Calculate the layers
    var layers = parseInt(n / 2) + n % 2;
    var max1 = -1000000000;
     
    // Iterate for all the layers
    for(var i = 0; i < layers; i++)
    {
         
        // Find maximum
        max1 = Math.max(max1,
        getBoundaryMin(a, n, i));
    }
     
    // Print the answer
    document.write(max1);
}
 
// Driver Code
 
// Initialize the matrix
var a = [ [ 1, 2, 3, 4 ],
          [ 5, 6, 7, 8 ],
          [ 9, 10, 11, 12 ],
          [ 13, 14, 15, 16 ] ];
var n = a.length;
 
// Function call
MaximumOfMinimum(a, n);
 
// This code is contributed by itsok
 
</script>
Producción: 

6

 

Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por jrishabh99 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 *