Input
Given a square matrix of size N x N
, calculate the absolute difference between the sums of its diagonals.
Output
Print the absolute difference between the two sums of the matrix’s diagonals as a single integer.
Sample Input
$$ matrix = \begin{bmatrix} 11 & 2 & 4 \newline 4 & 5 & 6 \newline 10 & 8 &-12 \end{bmatrix} $$
Sample Output
15
Explanation
The primary diagonal is:
$$ \begin{bmatrix} 11 \newline 5 \newline -12 \end{bmatrix} $$
Sum across the primary diagonal: 11 + 5 - 12 = 4
The secondary diagonal is:
$$ \begin{bmatrix} 4 \newline 5 \newline 10 \end{bmatrix} $$
Sum across the secondary diagonal: 4 + 5 + 10 = 19
Difference: |4 - 19| = 15
Note: |x|
is absolute value function
Solution
import java.lang.Math;
public class MatrixDiagonalSubstractor {
private int sum(int[][] matrix){
int diagonalA = 0;
int diagonalB = 0;
int n = matrix.length;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(i==j){
diagonalA = diagonalA + matrix[i][j];
}
if(j==n-i-1){
diagonalB = diagonalB + matrix[i][j];
}
}
}
return Math.abs(diagonalA - diagonalB);
}
public static void main(String[] args){
int[][] matrix = {
{11, 2, 4},
{ 4, 5, 6},
{10, 8,-12},
};
int result = new MatrixDiagonalSubstractor().sum(matrix);
assert 15 == result;
}
}
This kind of solution has O(N^2)
complexity, since it’s performance is directly proportional to the square of the size of the input data set. This is common with algorithms that involve nested iterations over the data set. For more information about it, please refer A Beginner’s Guide to Big O nottation
To download the code:
git clone https://github.com/josdem/algorithms-workshop.git
cd matrix-diagonal-difference
To run Java code:
javac MatrixDiagonalSubstractor.java
java -ea MatrixDiagonalSubstractor