# Sum of squares of differences between all pairs of an array

• Difficulty Level : Hard
• Last Updated : 29 Jan, 2022

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` `    ``# Print the 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)

My Personal Notes arrow_drop_up