Programa Java para maximizar la suma de la diagonal de una array rotando todas las filas o todas las columnas

Dada una array cuadrada , mat[][] de dimensiones N * N , la tarea es encontrar la suma máxima posible de elementos diagonales de la array dada al rotar todas las filas o todas las columnas de la array por un número entero positivo.

Ejemplos:

Entrada: mat[][] = { { 1, 1, 2 }, { 2, 1, 2 }, { 1, 2, 2 } }
Salida:
Explicación: 
Rotar todas las columnas de matrix por 1 modifica mat[] [] a { {2, 1, 2}, {1, 2, 2}, {1, 1, 2} }. 
Por tanto, la suma de los elementos de la diagonal de la array = 2 + 2 + 2 = 6 que es el máximo posible.

Entrada: A[][] = { { -1, 2 }, { -1, 3 } }
Salida: 2

Planteamiento: La idea es rotar todas las filas y columnas de la array de todas las formas posibles y calcular la suma máxima obtenida. Siga los pasos para resolver el problema:

  • Inicialice una variable, digamos maxDiagonalSum para almacenar la suma máxima posible de elementos diagonales de la array rotando todas las filas o columnas de la array.
  • Gire todas las filas de la array por un entero positivo en el rango [0, N – 1] y actualice el valor de maxDiagonalSum .
  • Rote todas las columnas de la array por un entero positivo en el rango [0, N – 1] y actualice el valor de maxDiagonalSum .
  • Finalmente, imprima el valor de maxDiagonalSum .

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

Java

// Java program to implement 
// the above approach 
import java.util.*;
  
class GFG{
  
static int N = 3;
   
// Function to find maximum sum of 
// diagonal elements of matrix by
// rotating either rows or columns
static int findMaximumDiagonalSumOMatrixf(int A[][])
{
      
    // Stores maximum diagonal sum of elements
    // of matrix by rotating rows or columns
    int maxDiagonalSum = Integer.MIN_VALUE;
      
    // Rotate all the columns by an integer
    // in the range [0, N - 1]
    for(int i = 0; i < N; i++) 
    {
          
        // Stores sum of diagonal elements
        // of the matrix
        int curr = 0;
          
        // Calculate sum of diagonal 
        // elements of the matrix
        for(int j = 0; j < N; j++) 
        {
              
            // Update curr
            curr += A[j][(i + j) % N];
        }
           
        // Update maxDiagonalSum
        maxDiagonalSum = Math.max(maxDiagonalSum, 
                                  curr);
    }
      
    // Rotate all the rows by an integer
    // in the range [0, N - 1]
    for(int i = 0; i < N; i++)
    {
          
        // Stores sum of diagonal elements
        // of the matrix
        int curr = 0;
          
        // Calculate sum of diagonal 
        // elements of the matrix
        for(int j = 0; j < N; j++) 
        {
              
            // Update curr
            curr += A[(i + j) % N][j];
        }
          
        // Update maxDiagonalSum
        maxDiagonalSum = Math.max(maxDiagonalSum, 
                                  curr);
    }
    return maxDiagonalSum;
}
   
// Driver Code
public static void main(String[] args)
{
    int[][] mat = { { 1, 1, 2 }, 
                    { 2, 1, 2 }, 
                    { 1, 2, 2 } };
       
    System.out.println(
        findMaximumDiagonalSumOMatrixf(mat));
}
}
  
// This code is contributed by susmitakundugoaldanga
Producción: 

6

 

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

Consulte el artículo completo sobre Maximizar la suma de la diagonal de una array girando todas las filas o todas las columnas para obtener más detalles.

Publicación traducida automáticamente

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