Find difference between sums of two diagonals - GeeksforGeeks

28 Apr, 2022
Given a matrix of n X n. The task is to calculate the absolute difference between the sums of its diagonal.Examples:  
Input : mat[][] = 11 2 4
                   4 5 6
                  10 8 -12 
Output : 15
Sum of primary diagonal = 11 + 5 + (-12) = 4.
Sum of secondary diagonal = 4 + 5 + 10 = 19.
Difference = |19 - 4| = 15.


Input : mat[][] = 10 2
                   4 5
Output : 7
 
Calculate the sums across the two diagonals of a square matrix. Along the first diagonal of the matrix, row index = column index i.e mat[i][j] lies on the first diagonal if i = j. Along the other diagonal, row index = n – 1 – column index i.e mat[i][j] lies on the second diagonal if i = n-1-j. By using two loops we traverse the entire matrix and calculate the sum across the diagonals of the matrix.Below is the implementation of this approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find the difference// between the sum of diagonal.#include <bits/stdc++.h>#define MAX 100using namespace std; int difference(int arr[][MAX], int n){    // Initialize sums of diagonals    int d1 = 0, d2 = 0;     for (int i = 0; i < n; i++)    {        for (int j = 0; j < n; j++)        {            // finding sum of primary diagonal            if (i == j)                d1 += arr[i][j];             // finding sum of secondary diagonal            if (i == n - j - 1)                d2 += arr[i][j];        }    }     // Absolute difference of the sums    // across the diagonals    return abs(d1 - d2);} // Driven Programint main(){    int n = 3;     int arr[][MAX] =    {        {11, 2, 4},        {4 , 5, 6},        {10, 8, -12}    };     cout << difference(arr, n);    return 0;}
// JAVA Code for Find difference between sums// of two diagonalsclass GFG {         public static int difference(int arr[][], int n)    {        // Initialize sums of diagonals        int d1 = 0, d2 = 0;              for (int i = 0; i < n; i++)        {            for (int j = 0; j < n; j++)            {                // finding sum of primary diagonal                if (i == j)                    d1 += arr[i][j];                      // finding sum of secondary diagonal                if (i == n - j - 1)                    d2 += arr[i][j];            }        }              // Absolute difference of the sums        // across the diagonals        return Math.abs(d1 - d2);    }         /* Driver program to test above function */    public static void main(String[] args)    {        int n = 3;                  int arr[][] =        {            {11, 2, 4},            {4 , 5, 6},            {10, 8, -12}        };              System.out.print(difference(arr, n));            }  }// This code is contributed by Arnav Kr. Mandal.
# Python3 program to find the difference# between the sum of diagonal.def difference(arr, n):     # Initialize sums of diagonals    d1 = 0    d2 = 0     for i in range(0, n):             for j in range(0, n):                     # finding sum of primary diagonal            if (i == j):                d1 += arr[i][j]             # finding sum of secondary diagonal            if (i == n - j - 1):                d2 += arr[i][j]             # Absolute difference of the sums    # across the diagonals    return abs(d1 - d2); # Driver Coden = 3 arr = [[11, 2, 4],       [4 , 5, 6],       [10, 8, -12]] print(difference(arr, n))     # This code is contributed# by ihritik
// C# Code for find difference between// sums of two diagonalsusing System; public class GFG{     // Function to calculate difference    public static int difference(int[,] arr,                                 int n)    {                 // Initialize sums of diagonals        int d1 = 0, d2 = 0;             for (int i = 0; i < n; i++)        {            for (int j = 0; j < n; j++)            {                                 // finding sum of primary diagonal                if (i == j)                    d1 += arr[i, j];                     // finding sum of secondary diagonal                if (i == n - j - 1)                    d2 += arr[i, j];            }        }             // Absolute difference of the        // sums across the diagonals        return Math.Abs(d1 - d2);    }         // Driver Code    public static void Main()    {        int n = 3;                 int[,] arr ={{11, 2, 4},                     {4 , 5, 6},                     {10, 8, -12}};             Console.Write(difference(arr, n));             }} // This code is contributed by shiv_bhakt.
<?php// PHP program to find the difference// between the sum of diagonal. function difference($arr, $n){         // Initialize sums of diagonals    $d1 = 0; $d2 = 0;     for ($i = 0; $i < $n; $i++)    {        for ($j = 0; $j < $n; $j++)        {                         // finding sum of            // primary diagonal            if ($i == $j)                $d1 += $arr[$i][$j];             // finding sum of            // secondary diagonal            if ($i == $n - $j - 1)                $d2 += $arr[$i][$j];        }    }     // Absolute difference of the sums    // across the diagonals    return abs($d1 - $d2);} // Driver Code{    $n = 3;     $arr = array(array(11, 2, 4),                 array(4 , 5, 6),                 array(10, 8, -12));     echo difference($arr, $n);    return 0;} // This code is contributed by nitin mittal.?>
<script> // Javascript Code for Find difference between sums// of two diagonals function difference(arr,n)    {        // Initialize sums of diagonals        let d1 = 0, d2 = 0;             for (let i = 0; i < n; i++)        {            for (let j = 0; j < n; j++)            {                // finding sum of primary diagonal                if (i == j)                    d1 += arr[i][j];                     // finding sum of secondary diagonal                if (i == n - j - 1)                    d2 += arr[i][j];            }        }             // Absolute difference of the sums        // across the diagonals        return Math.abs(d1 - d2);    }         /* Driver program to test above function */             let n = 3;                 let arr =        [            [11, 2, 4],            [4 , 5, 6],            [10, 8, -12]        ];             document.write(difference(arr, n));     // This code is contributed Bobby </script>
Output:  
15
Time complexity: O(n*n)We can optimize the above solution to work in O(n) using the patterns present in indexes of cells.  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find the difference// between the sum of diagonal.#include <bits/stdc++.h>#define MAX 100using namespace std; int difference(int arr[][MAX], int n){    // Initialize sums of diagonals    int d1 = 0, d2 = 0;     for (int i = 0; i < n; i++)    {        d1 += arr[i][i];        d2 += arr[i][n-i-1];    }     // Absolute difference of the sums    // across the diagonals    return abs(d1 - d2);} // Driven Programint main(){    int n = 3;     int arr[][MAX] =    {        {11, 2, 4},        {4 , 5, 6},        {10, 8, -12}    };     cout << difference(arr, n);    return 0;}
// JAVA Code for Find difference between sums// of two diagonals class GFG {         public static int difference(int arr[][], int n)    {        // Initialize sums of diagonals        int d1 = 0, d2 = 0;              for (int i = 0; i < n; i++)        {            d1 += arr[i][i];            d2 += arr[i][n-i-1];        }              // Absolute difference of the sums        // across the diagonals        return Math.abs(d1 - d2);    }         /* Driver program to test above function */    public static void main(String[] args)    {        int n = 3;                  int arr[][] =        {            {11, 2, 4},            {4 , 5, 6},            {10, 8, -12}        };              System.out.print(difference(arr, n));            }  }// This code is contributed by Arnav Kr. Mandal.
# Python3 program to find the difference# between the sum of diagonal.def difference(arr, n):     # Initialize sums of diagonals    d1 = 0    d2 = 0     for i in range(0, n):        d1 = d1 + arr[i][i]        d2 = d2 + arr[i][n - i - 1]             # Absolute difference of the sums    # across the diagonals    return abs(d1 - d2) # Driver Coden = 3 arr = [[11, 2, 4],       [4 , 5, 6],       [10, 8, -12]] print(difference(arr, n))     # This code is contributed# by ihritik
// C# Code for find difference between// sums of two diagonalsusing System; public class GFG {         //Function to find difference    public static int difference(int[,] arr,                                 int n)    {                 // Initialize sums of diagonals        int d1 = 0, d2 = 0;             for (int i = 0; i < n; i++)        {            d1 += arr[i, i];            d2 += arr[i, n - i - 1];        }             // Absolute difference of the sums        // across the diagonals        return Math.Abs(d1 - d2);    }         // Driver Code    public static void Main()    {        int n = 3;                 int[,] arr ={{11, 2, 4},                     {4 , 5, 6},                     {10, 8, -12}};             Console.Write(difference(arr, n));             }} // This code is contributed by shiv_bhakt.
<?php// PHP program to find the difference// between the sum of diagonal. function difference($arr, $n){         // Initialize sums of diagonals    $d1 = 0; $d2 = 0;     for ($i = 0; $i < $n; $i++)    {        $d1 += $arr[$i][$i];        $d2 += $arr[$i][$n-$i-1];    }     // Absolute difference of the sums    // across the diagonals    return abs($d1 - $d2);} // Driver Code{    $n = 3;     $arr =array(array(11, 2, 4),                array(4, 5, 6),                array(10, 8, -12));     echo difference($arr, $n);    return 0;} // This code is contributed by nitin mittal.?>
<script>// JAVA SCRIPT  Code for Find difference between sums// of two diagonals function difference(arr,n)    {             // Initialize sums of diagonals        let d1 = 0, d2 = 0;             for (let i = 0; i < n; i++)        {            d1 += arr[i][i];            d2 += arr[i][n-i-1];        }             // Absolute difference of the sums        // across the diagonals        return Math.abs(d1 - d2);    }         /* Driver program to test above function */             let n = 3;               let arr = [[11, 2, 4],            [4 , 5, 6],            [10, 8, -12]];             document.write(difference(arr, n));          // This code is contributed by sravan kumar Gottumukkala</script>
Output:  
15
Time complexity : O(n)This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
Vishal_Khoda
nitin mittal
ihritik
gottumukkalabobby
sravankumar8128
senkottuvelan
Matrix
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum size square sub-matrix with all 1s
Sudoku | Backtracking-7
Divide and Conquer | Set 5 (Strassen's Matrix Multiplication)
Maximum size rectangle binary sub-matrix with all 1s
Program to multiply two matrices
Inplace rotate square matrix by 90 degrees | Set 1
Min Cost Path | DP-6
Rotate a matrix by 90 degree in clockwise direction without using any extra space
The Celebrity Problem
Python program to multiply two matrices