Array formed using sum of absolute differences of that element with all other elements
Last Updated :
18 May, 2021
Given a sorted array arr[] of N distinct positive integers. The task is to generate an array such that the element at each index in the new array is the sum of absolute differences of the corresponding element with all other elements of the given array.
Input: arr[] = [2, 3, 5]
Output: [4, 3, 5]
Explanation:
distance(2) = |2 - 3| + |2 - 5| = 4
distance(3) = |3 - 2| + |3 - 5| = 3
distance(5) = |5 - 2| + |5 - 3| = 5
Therefore, we will return [4, 3, 5]
Input: arr[] = [2, 3, 5, 6]
Output: [8, 6, 6, 8]
Explanation:
distance(2) = |2 - 3| + |2 - 5| + |2 - 6|= 8
distance(3) = |3 - 2| + |3 - 5| + |3 - 6|= 6
distance(5) = |5 - 2| + |5 - 3| + |5 - 6|= 6
distance(6) = |6 - 2| + |6 - 3| + |6 - 5|= 8
Therefore, we will return [8, 6, 6, 8]
Naive Approach: The idea is to generate all possible pairs for each element in the array arr[] and add the summation of the absolute difference of the pairs for each element in the new array. Print the array after the above steps for all the elements.
Below is the implementation of the above approach:
C++
// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to return the new array
vector<int> calculate(int* arr, int n)
{
// Initialize the Arraylist
vector<int> ans;
// Sum of absolute differences
// of element with all elements
for(int i = 0; i < n; i++)
{
// Initialize int sum to 0
int sum = 0;
for(int j = 0; j < n; j++)
{
sum += abs(arr[i] - arr[j]);
}
// Add the value of sum to ans
ans.push_back(sum);
}
// Return the final ans
return ans;
}
// Driver Code
int main()
{
// Given array arr[]
int arr[] = { 2, 3, 5, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
// Function call
vector<int> ans = calculate(arr, n);
cout << "[";
for(auto itr : ans)
cout << itr << ", ";
cout << "]";
return 0;
}
// This code is contributed by jrishabh99
Java
// Java program for the above approach
import java.util.*;
class GFG {
// Function to return the new array
private static List<Integer>
calculate(int[] arr)
{
// Length of the arraylist
int n = arr.length;
// Initialize the Arraylist
List<Integer> ans
= new ArrayList<Integer>();
// Sum of absolute differences
// of element with all elements
for (int i = 0;
i < arr.length; i++) {
// Initialize int sum to 0
int sum = 0;
for (int j = 0;
j < arr.length; j++) {
sum += Math.abs(arr[i] - arr[j]);
}
// Add the value of sum to ans
ans.add(sum);
}
// Return the final ans
return ans;
}
// Driver Code
public static void
main(String[] args)
{
// Given array arr[]
int[] arr = { 2, 3, 5, 6 };
// Function Call
System.out.println(calculate(arr));
}
}
Python3
# Python3 program for the above approach
# Function to return the new array
# private static List<Integer>
def calculate(arr):
# Length of the arraylist
n = len(arr)
# Initialize the Arraylist
ans = []
# Sum of absolute differences
# of element with all elements
for i in range(n):
# Initialize sum to 0
sum = 0
for j in range(len(arr)):
sum += abs(arr[i] - arr[j])
# Add the value of sum to ans
ans.append(sum)
# Return the final ans
return ans
# Driver Code
if __name__ == '__main__':
# Given array arr[]
arr = [ 2, 3, 5, 6 ]
# Function call
print(calculate(arr))
# This code is contributed by mohit kumar 29
C#
// C# program for the above approach
using System;
using System.Collections;
using System.Collections.Generic;
class GFG{
// Function to return the new array
private static List<int> calculate(int[] arr)
{
// Length of the arraylist
int n = arr.Length;
// Initialize the Arraylist
List<int> ans = new List<int>();
// Sum of absolute differences
// of element with all elements
for(int i = 0; i < arr.Length; i++)
{
// Initialize int sum to 0
int sum = 0;
for(int j = 0; j < arr.Length; j++)
{
sum += Math.Abs(arr[i] - arr[j]);
}
// Add the value of sum to ans
ans.Add(sum);
}
// Return the final ans
return ans;
}
// Driver Code
public static void Main(string[] args)
{
// Given array arr[]
int[] arr = { 2, 3, 5, 6 };
List<int> tmp = calculate(arr);
Console.Write("[");
for(int i = 0; i < tmp.Count; i++)
{
if(i != tmp.Count - 1)
{
Console.Write(tmp[i] + ", ");
}
else
{
Console.Write(tmp[i]);
}
}
Console.Write("]");
}
}
// This code is contributed by rutvik_56
JavaScript
<script>
// Javascript program for
// the above approach
// Function to return the new array
function
calculate(arr)
{
// Length of the arraylist
let n = arr.length;
// Initialize the Arraylist
let ans
= [];
// Sum of absolute differences
// of element with all elements
for (let i = 0;
i < arr.length; i++) {
// Initialize let sum to 0
let sum = 0;
for (let j = 0;
j < arr.length; j++) {
sum += Math.abs(arr[i] - arr[j]);
}
// Add the value of sum to ans
ans.push(sum);
}
// Return the final ans
return ans;
}
// Driver Code
// Given array arr[]
let arr = [ 2, 3, 5, 6 ];
// Function Call
document.write(calculate(arr));
</script>
Time Complexity: O(N^2)
Auxiliary Space: O(N)
Efficient Approach: To optimize the above approach the idea is to keep track of the accumulated subtraction of the values to the left and of the sum of values to the right. The sum of the difference of all the pairs for each element is given by:
num_of_elements_to_the_left * current_value -num_of_elements_to_the_right * current_value
- Find the sum of all the elements in the given array(say sum).
- Initialize sub as 0.
- Traverse the given array and for each element do the following:
- Subtract the current value arr[i] from the sum.
- Add the difference of all the pairs for each element using the formula to the resultant array:
sub + (i * arr[i]) - ((n - i - 1) * arr[i]) + sum
- Subtract the current value arr[i] from the sum.
- Print the resultant array after the above steps.
Below is the implementation of the above approach:
C++
// C++ program for the
// above approach
#include <bits/stdc++.h>
using namespace std;
// Function to return list of
// total Distance of each element
// from other elements in array
vector<int> calculate(int arr[],
int n)
{
int sub = 0;
int sum = 0;
// Initialize the arraylist
vector<int> ans;
// Keep track of the
// accumulated of the
// sum of values to right
for (int i = n - 1;
i >= 0; i--)
sum += arr[i];
// Keep track of the
// accumulated subtraction
// of the values to the left
for (int i = 0; i < n; i++)
{
sum -= arr[i];
// Add the value to the
// resultant array ans[]
ans.push_back(sub + (i * arr[i]) -
((n - i - 1) *
arr[i]) + sum);
sub -= arr[i];
}
// Return the final
// answer
return ans;
}
// Driver Code
int main()
{
// Initialize the array
int arr[] = {2, 3, 5, 6};
int n = sizeof(arr) /
sizeof(arr[0]);
vector<int> ans = (calculate(arr, n));
for (int i = 0; i < n; i++)
cout << ans[i] << " ";
}
// This code is contributed by Chitranayal
Java
// Java program for the above approach
import java.util.*;
class GFG {
// Function to return list of
// total Distance of each element
// from other elements in array
private static List<Integer>
calculate(int[] arr)
{
// Length of the array
int n = arr.length;
int sub = 0;
int sum = 0;
// Initialize the arraylist
List<Integer> ans
= new ArrayList<Integer>();
// Keep track of the accumulated
// of the sum of values to right
for (int i = n - 1; i >= 0; i--)
sum += arr[i];
// Keep track of the accumulated
// subtraction of the values to the left
for (int i = 0; i < arr.length; i++) {
sum -= arr[i];
// Add the value to the resultant
// array ans[]
ans.add(sub
+ (i * arr[i])
- ((n - i - 1)
* arr[i])
+ sum);
sub -= arr[i];
}
// return the final answer
return ans;
}
// Driver Code
public static void
main(String[] args)
{
// Initialize the array
int[] arr = { 2, 3, 5, 6 };
// Function Call
System.out.println(calculate(arr));
}
}
Python3
# Python3 program for the above approach
# Function to return list of
# total Distance of each element
# from other elements in array
def calculate (arr):
# Length of the array
n = len(arr)
sub = 0
Sum = 0
# Initialize the ArrayList
ans = []
# Keep track of the accumulated
# of the sum of values to right
for i in range(n - 1, -1, -1):
Sum += arr[i]
# Keep track of the accumulated
# subtraction of values to left
for i in range(len(arr)):
Sum -= arr[i]
# Add the value to the resultant
# array ans[]
ans.append(sub + (i * arr[i]) -
((n - i - 1) * arr[i]) + Sum)
sub -= arr[i]
# Return the final answer
return ans
# Driver Code
if __name__ == '__main__':
# Initialize the array
arr = [ 2, 3, 5, 6 ]
# Function call
print(calculate(arr))
# This code is contributed by himanshu77
C#
// C# program for the above approach
using System;
using System.Collections.Generic;
class GFG{
// Function to return list of
// total Distance of each element
// from other elements in array
private static List<int> calculate(int[] arr)
{
// Length of the array
int n = arr.Length;
int sub = 0;
int sum = 0;
// Initialize the arraylist
List<int> ans = new List<int>();
// Keep track of the accumulated
// of the sum of values to right
for(int i = n - 1; i >= 0; i--)
sum += arr[i];
// Keep track of the accumulated
// subtraction of the values to the left
for(int i = 0; i < arr.Length; i++)
{
sum -= arr[i];
// Add the value to the resultant
// array ans[]
ans.Add(sub + (i * arr[i]) -
((n - i - 1) *
arr[i]) + sum);
sub -= arr[i];
}
// return the readonly answer
return ans;
}
// Driver Code
public static void Main(String[] args)
{
// Initialize the array
int[] arr = { 2, 3, 5, 6 };
// Function Call
Console.Write("[ ");
foreach(int i in calculate(arr))
Console.Write(i + ", ");
Console.Write("]");
}
}
// This code is contributed by amal kumar choubey
JavaScript
<script>
// Javascript program for the
// above approach
// Function to return list of
// total Distance of each element
// from other elements in array
function calculate(arr, n)
{
var sub = 0;
var sum = 0;
// Initialize the arraylist
var ans = [];
// Keep track of the
// accumulated of the
// sum of values to right
for (var i = n - 1;
i >= 0; i--)
sum += arr[i];
// Keep track of the
// accumulated subtraction
// of the values to the left
for (var i = 0; i < n; i++)
{
sum -= arr[i];
// Add the value to the
// resultant array ans[]
ans.push(sub + (i * arr[i]) -
((n - i - 1) *
arr[i]) + sum);
sub -= arr[i];
}
// Return the final
// answer
return ans;
}
// Driver Code
// Initialize the array
var arr = [2, 3, 5, 6]
var n = arr.length;
var ans = (calculate(arr, n));
for (var i = 0; i < n; i++)
document.write( ans[i] + " ");
// This code is contributed by famously.
</script>
Time Complexity: O(N)
Space Complexity: O(N)
Similar Reads
Find the array element having minimum sum of absolute differences with all other array elements Given an array arr[] of size N, the task is to find the minimum sum of absolute differences of an array element with all elements of another array. Input: arr[ ] = {1, 2, 3, 4, 5}, N = 5Output: 3Explanation: For arr[0](= 1): Sum = abs(2 - 1) + abs(3 - 1) + abs(4 - 1) + abs(5 - 1) = 10.For arr[1](= 2
4 min read
Count of elements whose absolute difference with the sum of all the other elements is greater than k Given an array arr[] of N integers and an integer K, the task is to find the number of anomalies in the array. An anomaly is a number for which the absolute difference between it and all the other numbers in the array is greater than K. Find the number of anomalies. Examples: Input: arr[] = {1, 3, 5
5 min read
Array element with minimum sum of absolute differences | Set 2 Given an array arr[] consisting of N positive integers, the task is to find an array element X such that sum of its absolute differences with every array element is minimum. Examples: Input: arr[] = {1, 2, 3, 4, 5}Output: 3Explanation: For element arr[0](= 1): |(1 - 1)| + |(2 - 1)| + |(3 - 1)| + |(4
7 min read
Maximize the absolute difference for all elements in the array Given an array A[] of size N and B[] of size M (M >= N), the task is to construct an array C[] by choosing N integers from B[] such that for every index i, sum of absolute difference between A[i] and C[i] is maximum. Examples: Input: N = 4, M = 6, A[] = {6, 1, 2, 4}, B[] = {3, 5, 1, 7, 2, 3}Outpu
10 min read
Replace all elements by difference of sums of positive and negative numbers after that element Given an array of positive and negative elements. The task is to replace every i-th element of the array by the absolute difference of absolute sums of positive and negative elements in the range i+1 to N. That is, find the absolute sum of all positive elements and the absolute sum of all negative e
12 min read
k-th smallest absolute difference of two elements in an array We are given an array of size n containing positive integers. The absolute difference between values at indices i and j is |a[i] - a[j]|. There are n*(n-1)/2 such pairs and we are asked to print the kth (1 <= k <= n*(n-1)/2) as the smallest absolute difference among all these pairs. Examples:
9 min read