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 = 56Input: arr[] = {-5, 8, 9, -4, -3}
Output: 950
Brute Force Approach:
The brute force approach to solve this problem is to use nested loops to generate all possible pairs of elements from the given array and then calculate the square of the difference between each pair. Finally, we can sum up all the squared differences to get the desired output.
Here are the steps of approach:
- Initialize a variable sum to 0 to keep track of the running sum of squared differences.
- Use nested loops to generate all possible pairs of elements from the given array. The outer loop will iterate through all the elements of the array, and the inner loop will start from the next element and go till the end of the array. This ensures that we generate all possible pairs of elements.
- For each pair of elements, calculate the difference between them and square the result. Add this squared difference to the running sum.
- After the loops have finished iterating through all possible pairs of elements, output the value of the sum variable. This will be the sum of squared differences of all possible pairs of elements in the given array.
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to calculate sum of squares // of differences of all possible pairs void sumOfSquaredDifferences( int arr[], int N)
{ int sum = 0;
// Nested loops to generate all possible pairs
for ( int i = 0; i < N; i++) {
for ( int j = i + 1; j < N; j++) {
// Calculating the square of the difference between the pairs
int diff = arr[i] - arr[j];
sum += (diff * diff);
}
}
// Output the sum of squared differences of all possible pairs
cout << sum << endl;
} // Driver Code int main()
{ // Given array
int arr[] = { 2, 8, 4 };
// Size of the array
int N = sizeof (arr) / sizeof (arr[0]);
// Function call to find sum of square
// of differences of all possible pairs
sumOfSquaredDifferences(arr, N);
return 0;
} |
/*package whatever //do not write package name here */ import java.io.*;
class GFG {
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);
}
public static void sumOfSquaredDifferences( int arr[],
int N)
{
int sum = 0 ;
// Nested loops to generate all possible pairs
for ( int i = 0 ; i < N; i++) {
for ( int j = i + 1 ; j < N; j++) {
// Calculating the square of the difference
// between the pairs
int diff = arr[i] - arr[j];
sum += (diff * diff);
}
}
// Output the sum of squared differences of all
// possible pairs
System.out.println(sum);
}
} //This code is contributed by aeroabrar_31 |
#Code in python for the above approach # Function to calculate the sum of squares of differences of all possible pairs def sumOfSquaredDifferences(arr):
N = len (arr)
sum = 0
# Nested loops to generate all possible pairs
for i in range (N):
for j in range (i + 1 , N):
# Calculating the square of the difference between the pairs
diff = arr[i] - arr[j]
sum + = (diff * diff)
# Output the sum of squared differences of all possible pairs
print ( sum )
# Driver code if __name__ = = "__main__" :
# Given array
arr = [ 2 , 8 , 4 ]
# Function call to find the sum of square
# of differences of all possible pairs
sumOfSquaredDifferences(arr)
|
using System;
class GFG
{ 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);
}
public static void SumOfSquaredDifferences( int [] arr, int N)
{
int sum = 0;
// Nested loops to generate all possible pairs
for ( int i = 0; i < N; i++)
{
for ( int j = i + 1; j < N; j++)
{
// Calculating the square of the difference
// between the pairs
int diff = arr[i] - arr[j];
sum += (diff * diff);
}
}
// Output the sum of squared differences of all
// possible pairs
Console.WriteLine(sum);
}
} //This code is contributed by aeroabrar_31 |
function sumOfSquaredDifferences(arr) {
let sum = 0;
// Nested loops to generate all possible pairs
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
// Calculating the square of the difference between the pairs
const diff = arr[i] - arr[j];
sum += diff * diff;
}
}
// Output the sum of squared differences of all possible pairs
console.log(sum);
} // Given array const arr = [2, 8, 4]; // Function call to find sum of square of differences of all possible pairs sumOfSquaredDifferences(arr); |
56
Time Complexity: O(N^2) since we use nested loops to generate all possible pairs of elements.
Space Complexity: O(1) as we are not using any extra space.
Efficient Approach: The optimal idea is based on rearranging the expression in the following manner:
∑i=2 n ∑j=1i-1 (Ai-Aj)2
Since Ai – Ai = 0, the above expression can be rearranged as 1/2*(∑i=1n ∑j=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=1n ∑j=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++ program for the above approach #include <bits/stdc++.h> 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[0]);
// Function call to find sum of square
// of differences of all possible pairs
sumOfSquaredDifferences(arr, N);
return 0;
} |
// 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 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# 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 |
<script> // Javascript program for the above approach // Function to calculate sum of squares // of differences of all possible pairs function sumOfSquaredDifferences(arr, N)
{ // Stores the final sum
let ans = 0;
// Stores temporary values
let sumA = 0, sumB = 0;
// Traverse the array
for (let 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
document.write(ans);
} // Driver Code // Given array let arr = [ 2, 8, 4 ]; // Size of the array let N = arr.length; // Function call to find sum of square // of differences of all possible pairs sumOfSquaredDifferences(arr, N); // This code is contributed by subhammahato348 </script> |
56
Time Complexity: O(N)
Auxiliary Space: O(1)