Array element with minimum sum of absolute differences - GeeksforGeeks

23 Aug, 2021
Given an array arr[] of N integers, the task is to find an element x from the array such that |arr[0] – x| + |arr[1] – x| + |arr[2] – x| + ... + |arr[n – 1] – x| is minimized, then print the minimized sum.Examples:  
Input: arr[] = {1, 3, 9, 3, 6} Output: 11 The optimal solution is to choose x = 3, which produces the sum |1 – 3| + |3 – 3| + |9 – 3| + |3 – 3| + |6 – 3| = 2 + 0 + 6 + 0 + 3 = 11Input: arr[] = {1, 2, 3, 4} Output: 4  
 
A simple solution is to iterate through every element and check if it gives optimal solution or not. Time Complexity of this solution is O(n*n)An Efficient Approach: is to always pick x as the median of the array. If n is even and there are two medians then both the medians are optimal choices. The time complexity for the approach is O(n * log(n)) because the array will have to be sorted in order to find the median. Calculate and print the minimized sum when x is found (median of the array).Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the minimized sumint minSum(int arr[], int n){    // Sort the array    sort(arr, arr + n);     // Median of the array    int x = arr[n / 2];     int sum = 0;     // Calculate the minimized sum    for (int i = 0; i < n; i++)        sum += abs(arr[i] - x);     // Return the required sum    return sum;} // Driver codeint main(){    int arr[] = { 1, 3, 9, 3, 6 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << minSum(arr, n);     return 0;}
// Java implementation of the approachimport java.util.*; class GFG{ // Function to return the minimized sumstatic int minSum(int arr[], int n){    // Sort the array    Arrays.sort(arr);     // Median of the array    int x = arr[(int)n / 2];     int sum = 0;     // Calculate the minimized sum    for (int i = 0; i < n; i++)        sum += Math.abs(arr[i] - x);     // Return the required sum    return sum;} // Driver codepublic static void main(String args[]){    int arr[] = { 1, 3, 9, 3, 6 };    int n = arr.length;    System.out.println(minSum(arr, n));}} // This code is contribute by// Surendra_Gangwar
# Python3 implementation of the approach # Function to return the minimized sumdef minSum(arr, n) :         # Sort the array    arr.sort();     # Median of the array    x = arr[n // 2];     sum = 0;     # Calculate the minimized sum    for i in range(n) :        sum += abs(arr[i] - x);     # Return the required sum    return sum; # Driver codeif __name__ == "__main__" :         arr = [ 1, 3, 9, 3, 6 ];    n = len(arr)    print(minSum(arr, n)); # This code is contributed by Ryuga
// C# implementation of the approachusing System; class GFG{     // Function to return the minimized sumstatic int minSum(int []arr, int n){    // Sort the array    Array.Sort(arr);     // Median of the array    int x = arr[(int)(n / 2)];     int sum = 0;     // Calculate the minimized sum    for (int i = 0; i < n; i++)        sum += Math.Abs(arr[i] - x);     // Return the required sum    return sum;} // Driver codestatic void Main(){    int []arr = { 1, 3, 9, 3, 6 };    int n = arr.Length;    Console.WriteLine(minSum(arr, n));}} // This code is contributed by mits
<script> //Javascript implementation of the approach  // Function to return the minimized sumfunction minSum(arr, n){    // Sort the array    arr.sort();     // Median of the array    let x = arr[Math.floor(n / 2)];     let sum = 0;     // Calculate the minimized sum    for (let i = 0; i < n; i++)        sum += Math.abs(arr[i] - x);     // Return the required sum    return sum;} // Driver code    let arr = [ 1, 3, 9, 3, 6 ];    let n = arr.length;    document.write(minSum(arr, n)); // This code is contributed by Mayank Tyagi </script>
11
 
The time complexity of the above solution is O(n Log n). We can further optimize it to work in O(n) using linear time algorithm to find k-th largest element. 
ankthon
Mithun Kumar
SURENDRA_GANGWAR
mayanktyagi1709
rajeev0719singh
array-traversal-question
median-finding
Arrays
C++ Programs
Sorting
Arrays
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Count pairs with given sum
Chocolate Distribution Problem
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
Header files in C/C++ and its uses
Program to print ASCII Value of a character
C++ Program for QuickSort
How to return multiple values from a function in C or C++?
Sorting a Map by value in C++ STL