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

• Last Updated : 27 Jan, 2022

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:
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!

My Personal Notes arrow_drop_up
Related Articles