Java Program to Maximize sum of diagonal of a matrix by rotating all rows or all columns

Given a square matrix, mat[][] of dimensions N * N, the task is find the maximum sum of diagonal elements possible from the given matrix by rotating either all the rows or all the columns of the matrix by a positive integer.

Examples:

Input: mat[][] = { { 1, 1, 2 }, { 2, 1, 2 }, { 1, 2, 2 } }
Output: 6Â
Explanation:Â
Rotating all the columns of matrix by 1 modifies mat[][] to { {2, 1, 2}, {1, 2, 2}, {1, 1, 2} }.Â
Therefore, the sum of diagonal elements of the matrix = 2 + 2 + 2 = 6 which is the maximum possible.

Input: A[][] = { { -1, 2 }, { -1, 3 } }
Output: 2

Approach: The idea is to rotate all the rows and columns of the matrix in all possible ways and calculate the maximum sum obtained. Follow the steps to solve the problem:

• Initialize a variable, say maxDiagonalSum to store the maximum possible sum of diagonal elements the matrix by rotating all the rows or columns of the matrix.
• Rotate all the rows of the matrix by a positive integer in the range [0, N – 1] and update the value of maxDiagonalSum.
• Rotate all the columns of the matrix by a positive integer in the range [0, N – 1] and update the value of maxDiagonalSum.
• Finally, print the value of maxDiagonalSum.

Below is the implementation of the above approach:

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`

Output:Â
`6`

Â

Time Complexity: O(N2)Â
Auxiliary Space: O(1)

Please refer complete article on Maximize sum of diagonal of a matrix by rotating all rows or all columns for more details!

Previous
Next