Skip to content
Related Articles
Sum of squares of differences between all pairs of an array
• Difficulty Level : Hard
• Last Updated : 14 Apr, 2021

Given an array arr[] of size N, the task is to compute the sum of squares of differences of all possible pairs.

Examples:

Input: arr[] = {2, 8, 4}
Output: 56
Explanation:
Sum of squared differences of all possible pairs = (2 – 8)2 + (2 – 4)2 + (8 – 4)2 = 56

Input: arr[] = {-5, 8, 9, -4, -3}
Output: 950

Naive Approach: The simplest approach is to generate all possible pairs and calculate the square of their differences of each pair and keep adding it to a variable, say sum. Finally, print the value of sum.

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

Efficient Approach: The optimal idea is based on rearranging the expression in the following manner:

i=2 nj=1i-1 (Ai-Aj)2

Since Ai – A = 0, the above expression can be rearranged as 1/2*(∑i=1nj=1n (Ai-Aj)2) which can be further be simplified using the identity:

(A – B)2 = A2 + B2 – 2 * A * B

As 1/2*(∑i=1nj=1n (Ai2 + Aj2 – 2*Ai*Aj)) = 1/2 * (2*n*∑i=1n Ai2  – 2*∑i=1n (Aj * ∑j=1n Aj))

The final expression is n*∑i=1n Ai2 – (∑i=1nAi)2 which can be computed by linearly iterating over the array.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to calculate sum of squares``// of differences of all possible pairs``void` `sumOfSquaredDifferences(``int` `arr[],``                             ``int` `N)``{``    ``// Stores the final sum``    ``int` `ans = 0;` `    ``// Stores temporary values``    ``int` `sumA = 0, sumB = 0;` `    ``// Traverse the array``    ``for` `(``int` `i = 0; i < N; i++) {``        ``sumA += (arr[i] * arr[i]);``        ``sumB += arr[i];``    ``}` `    ``sumA = N * sumA;``    ``sumB = (sumB * sumB);` `    ``// Final sum``    ``ans = sumA - sumB;` `    ``// Print the answer``    ``cout << ans;``}` `// Driver Code``int` `main()``{``    ``// Given array``    ``int` `arr[] = { 2, 8, 4 };` `    ``// Size of the array``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);` `    ``// Function call to find sum of square``    ``// of differences of all possible pairs``    ``sumOfSquaredDifferences(arr, N);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``class` `GFG{``    ` `// Function to calculate sum of squares``// of differences of all possible pairs``static` `void` `sumOfSquaredDifferences(``int` `arr[],``                                    ``int` `N)``{``    ` `    ``// Stores the final sum``    ``int` `ans = ``0``;` `    ``// Stores temporary values``    ``int` `sumA = ``0``, sumB = ``0``;` `    ``// Traverse the array``    ``for``(``int` `i = ``0``; i < N; i++)``    ``{``        ``sumA += (arr[i] * arr[i]);``        ``sumB += arr[i];``    ``}` `    ``sumA = N * sumA;``    ``sumB = (sumB * sumB);` `    ``// Final sum``    ``ans = sumA - sumB;` `    ``// Print the answer``    ``System.out.println(ans);``}` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ` `    ``// Given array``    ``int` `arr[] = { ``2``, ``8``, ``4` `};` `    ``// Size of the array``    ``int` `N = arr.length;` `    ``// Function call to find sum of square``    ``// of differences of all possible pairs``    ``sumOfSquaredDifferences(arr, N);``}``}` `// This code is contributed by AnkThon`

## Python3

 `# Python3 program for the above approach` `# Function to calculate sum of squares``# of differences of all possible pairs``def` `sumOfSquaredDifferences(arr, N):``  ` `    ``# Stores the final sum``    ``ans ``=` `0` `    ``# Stores temporary values``    ``sumA, sumB ``=` `0``, ``0` `    ``# Traverse the array``    ``for` `i ``in` `range``(N):``        ``sumA ``+``=` `(arr[i] ``*` `arr[i])``        ``sumB ``+``=` `arr[i]` `    ``sumA ``=` `N ``*` `sumA``    ``sumB ``=` `(sumB ``*` `sumB)` `    ``# Final sum``    ``ans ``=` `sumA ``-` `sumB` `    ``# Prthe answer``    ``print``(ans)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``  ` `    ``# Given array``    ``arr ``=` `[``2``, ``8``, ``4``]` `    ``# Size of the array``    ``N ``=` `len``(arr)``    ` `    ``# Function call to find sum of square``    ``# of differences of all possible pairs``    ``sumOfSquaredDifferences(arr, N)` `# This code is contributed by mohit kumar 29.`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{``    ` `// Function to calculate sum of squares``// of differences of all possible pairs``static` `void` `sumOfSquaredDifferences(``int` `[]arr,``                                    ``int` `N)``{``    ` `    ``// Stores the final sum``    ``int` `ans = 0;` `    ``// Stores temporary values``    ``int` `sumA = 0, sumB = 0;` `    ``// Traverse the array``    ``for``(``int` `i = 0; i < N; i++)``    ``{``        ``sumA += (arr[i] * arr[i]);``        ``sumB += arr[i];``    ``}` `    ``sumA = N * sumA;``    ``sumB = (sumB * sumB);` `    ``// Final sum``    ``ans = sumA - sumB;` `    ``// Print the answer``    ``Console.WriteLine(ans);``}` `// Driver Code``public` `static` `void` `Main(``string``[] args)``{``    ` `    ``// Given array``    ``int` `[]arr = { 2, 8, 4 };` `    ``// Size of the array``    ``int` `N = arr.Length;` `    ``// Function call to find sum of square``    ``// of differences of all possible pairs``    ``sumOfSquaredDifferences(arr, N);``}``}` `// This code is contributed by AnkThon`

## Javascript

 ``
Output:
`56`

Time Complexity: O(N)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up