Sum of absolute differences of all pairs in a given array

05 Jul, 2022
Given a sorted array of distinct elements, the task is to find the summation of absolute differences of all pairs in the given array.
Examples: 
Input : arr[] = {1, 2, 3, 4}
Output: 10
Sum of |2-1| + |3-1| + |4-1| +
       |3-2| + |4-2| + |4-3| = 10

Input : arr[] = {1, 8, 9, 15, 16}
Output: 74

Input : arr[] = {1, 2, 3, 4, 5, 7, 9, 11, 14}
Output: 188
A simple solution for this problem is to one by one look for each pair take their difference and sum up them together. The time complexity for this approach is O(n2).
An efficient solution for this problem needs a simple observation. Since array is sorted and elements are distinct when we take sum of absolute difference of pairs each element in the i’th position is added ‘i’ times and subtracted ‘n-1-i’ times. 
For example in {1,2,3,4} element at index 2 is arr[2] = 3 so all pairs having 3 as one element will be (1,3), (2,3) and (3,4), now when we take summation of absolute difference of pairs, then for all pairs in which 3 is present as one element summation will be = (3-1)+(3-2)+(4-3). We can see that 3 is added i = 2 times and subtracted n-1-i = (4-1-2) = 1 times. 
The generalized expression for each element will be sum = sum + (i*a[i]) – (n-1-i)*a[i]. 
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program to find sum of absolute differences// in all pairs in a sorted array of distinct numbers#include<bits/stdc++.h>using namespace std; // Function to calculate sum of absolute difference// of all pairs in array// arr[]  --> array of elementsint sumPairs(int arr[],int n){    // final result    int sum = 0;    for (int i=n-1; i>=0; i--)        sum += i*arr[i] - (n-1-i)*arr[i];    return sum;} // Driver program to run the caseint main(){    int arr[] = {1, 8, 9, 15, 16};    int n = sizeof(arr)/sizeof(arr[0]);    cout << sumPairs(arr, n);    return 0;} // This code is contributed by Sania Kumari Gupta
// C program to find sum of absolute differences// in all pairs in a sorted array of distinct numbers#include <stdio.h> // Function to calculate sum of absolute difference// of all pairs in array// arr[]  --> array of elementsint sumPairs(int arr[], int n){    // final result    int sum = 0;    for (int i = n - 1; i >= 0; i--)        sum += i * arr[i] - (n - 1 - i) * arr[i];    return sum;} // Driver program to run the caseint main(){    int arr[] = { 1, 8, 9, 15, 16 };    int n = sizeof(arr) / sizeof(arr[0]);    printf("%d", sumPairs(arr, n));    return 0;} // This code is contributed by Sania Kumari Gupta
// Java program to find sum of absolute differences in all// pairs in a sorted array of distinct numbersclass GFG {     // Function to calculate sum of absolute    // difference of all pairs in array    // arr[] --> array of elements    static int sumPairs(int arr[], int n)    {        // final result        int sum = 0;        for (int i = n - 1; i >= 0; i--)            sum += i * arr[i] - (n - 1 - i) * arr[i];        return sum;    }     // Driver program    public static void main(String arg[])    {        int arr[] = { 1, 8, 9, 15, 16 };        int n = arr.length;        System.out.print(sumPairs(arr, n));    }} // This code is contributed by Sania Kumari Gupta
# Python3 program to find sum of# absolute differences in all pairs# in a sorted array of distinct numbers # Function to calculate sum of absolute# difference of all pairs in array# arr[] --> array of elementsdef sumPairs(arr, n):     # final result    sum = 0    for i in range(n - 1, -1, -1):        sum += i*arr[i] - (n-1-i) * arr[i]    return sum # Driver programarr = [1, 8, 9, 15, 16]n = len(arr)print(sumPairs(arr, n)) # This code is contributed by Anant Agarwal.
// C# program to find sum of absolute// differences in all pairs in a sorted// array of distinct numbersusing System;class GFG {          // Function to calculate sum of absolute    // difference of all pairs in array    // arr[] --> array of elements    static int sumPairs(int []arr, int n)    {                  // final result        int sum = 0;        for (int i = n - 1; i >= 0; i--)            sum += i * arr[i] - (n - 1 - i)                                  * arr[i];                      return sum;    }          // Driver program    public static void Main()    {        int []arr = { 1, 8, 9, 15, 16 };        int n = arr.Length;                  Console.Write(sumPairs(arr, n));    }}  // This code is contributed by nitin mittal.
<?php // PHP program to find sum of absolute differences// in all pairs in a sorted array of distinct numbers // Function to calculate sum of absolute difference// of all pairs in array// arr[] --> array of elementsfunction sumPairs($arr,$n){    // final result    $sum = 0;    for ($i=$n-1; $i>=0; $i--)        $sum =  $sum + $i*$arr[$i] - ($n-1-$i)*$arr[$i];    return $sum;} // Driver program to run the case$arr = array(1, 8, 9, 15, 16);    $n = sizeof($arr)/sizeof($arr[0]);    echo sumPairs($arr, $n);?>
<script> // JavaScript program to find// sum of absolute differences// in all pairs in a sorted array// of distinct numbers // Function to calculate sum of absolute difference// of all pairs in array// arr[]  --> array of elementsfunction sumPairs( arr, n){    // final result    let sum = 0;    for (let i=n-1; i>=0; i--)        sum += i*arr[i] - (n-1-i)*arr[i];    return sum;} // Driver program to run the caselet arr = [ 1, 8, 9, 15, 16 ];let n = arr.length;document.write(sumPairs(arr, n)); </script>
74
Time Complexity: O(n) Auxiliary space: O(1)
What if array is not sorted? The efficient solution is also better for the cases where array is not sorted. We can sort the array first in O(n Log n) time and then find the required value in O(n). So overall time complexity is O(n Log n) which is still better than O(n2)
This article is contributed by Shashank Mishra ( Gullu ). 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. 
nitin mittal
ankita_saini
rohan07
sweetyty
krisania804
hardikkoriintern
Arrays
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Linear Search
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Introduction to Arrays
K'th Smallest/Largest Element in Unsorted Array | Set 1
Subset Sum Problem | DP-25
Introduction to Data Structures
Python | Using 2D arrays/lists the right way