# Find K elements whose absolute difference with median of array is maximum

Given an array arr[] and an integer K, the task is to find the K elements of the array whose absolute difference with median of array is maximum.
Note: If two elements have equal difference then the maximum element is taken into consideration.
Examples:

Input : arr[] = {1, 2, 3, 4, 5}, k = 3
Output : {5, 1, 4}
Explanation :
Median m = 3,
Difference of each array elements from median,
1 ==> diff(1-3) = 2
2 ==> diff(2-3) = 1
3 ==> diff(3-3) = 0
4 ==> diff(4-3) = 1
5 ==> diff(5-3) = 2
First K elements are 5, 1, 4 in this array.
Input: arr[] = {1, 2, 3}, K = 2
Output: {3, 1}

Approach:

• Sort the array and find the median of the array
• Create a difference array to store the difference of each element with the median of the sorted array.
• Highest difference elements will be the corner elements of the array. Therefore, intialize the two pointers as both the corner elements of the array that is 0 and N – 1.
• Finally include the elements of the array one by one with the maximum difference with the median.

Below is the implementation of the above approach:

## C++

 `// C++ implementation to find first K ` `// elements whose difference with the  ` `// median of array is maximum ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function for calculating median  ` `double` `findMedian(``int` `a[], ``int` `n)  ` `{ ` `    ``// check for even case  ` `    ``if` `(n % 2 != 0)  ` `       ``return` `(``double``)a[n/2];  ` `       `  `    ``return` `(``double``)(a[(n-1)/2] + a[n/2])/2.0;  ` `}  ` ` `  `// Function to find the K maximum absolute ` `// difference with the median of the array ` `void` `kStrongest(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``// Sort the array. ` `    ``sort(arr, arr + n); ` ` `  `    ``// Store median ` `    ``double` `median = findMedian(arr, n); ` `    ``int` `diff[n]; ` ` `  `    ``// Find and store difference ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``diff[i] = ``abs``(median - arr[i]); ` `    ``} ` ` `  `    ``int` `i = 0, j = n - 1; ` `    ``while` `(k > 0) { ` `         `  `        ``// If diff[i] is greater print it ` `        ``// Else print diff[j] ` `        ``if` `(diff[i] > diff[j]) { ` `            ``cout << arr[i] << ``" "``; ` `            ``i++; ` `        ``} ` `        ``else` `{ ` `            ``cout << arr[j] << ``" "``; ` `            ``j--; ` `        ``} ` `        ``k--; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 1, 2, 3, 4, 5 }; ` `    ``int` `k = 3; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` ` `  `    ``kStrongest(arr, n, k); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation to find first K ` `// elements whose difference with the  ` `// median of array is maximum ` `import` `java.util.*; ` `class` `GFG{ ` `  `  `// Function for calculating median  ` `static` `double` `findMedian(``int` `a[], ``int` `n)  ` `{ ` `    ``// check for even case  ` `    ``if` `(n % ``2` `!= ``0``)  ` `       ``return` `(``double``)a[n / ``2``];  ` `        `  `    ``return` `(``double``)(a[(n - ``1``) / ``2``] +  ` `                    ``a[n / ``2``]) / ``2.0``;  ` `}  ` `  `  `// Function to find the K maximum absolute ` `// difference with the median of the array ` `static` `void` `kStrongest(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``// Sort the array. ` `    ``Arrays.sort(arr); ` `  `  `    ``// Store median ` `    ``double` `median = findMedian(arr, n); ` `    ``int` `[]diff = ``new` `int``[n]; ` `  `  `    ``// Find and store difference ` `    ``for` `(``int` `i = ``0``; i < n; i++)  ` `    ``{ ` `        ``diff[i] = (``int``)Math.abs(median - arr[i]); ` `    ``} ` `  `  `    ``int` `i = ``0``, j = n - ``1``; ` `    ``while` `(k > ``0``)  ` `    ``{ ` `          `  `        ``// If diff[i] is greater print it ` `        ``// Else print diff[j] ` `        ``if` `(diff[i] > diff[j]) ` `        ``{ ` `            ``System.out.print(arr[i] + ``" "``); ` `            ``i++; ` `        ``} ` `        ``else`  `        ``{ ` `            ``System.out.print(arr[j] + ``" "``); ` `            ``j--; ` `        ``} ` `        ``k--; ` `    ``} ` `} ` `  `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `arr[] = { ``1``, ``2``, ``3``, ``4``, ``5` `}; ` `    ``int` `k = ``3``; ` `    ``int` `n = arr.length; ` `  `  `    ``kStrongest(arr, n, k); ` `} ` `} ` `// This code is contributed by sapnasingh4991`

## Python3

 `# Python3 program to find first K ` `# elements whose difference with the ` `# median of array is maximum ` ` `  `# Function for calculating median ` `def` `findMedian(a, n): ` `     `  `    ``# Check for even case ` `    ``if` `(n ``%` `2` `!``=` `0``): ` `        ``return` `a[``int``(n ``/` `2``)] ` `         `  `    ``return` `(a[``int``((n ``-` `1``) ``/` `2``)] ``+`  `            ``a[``int``(n ``/` `2``)]) ``/` `2.0` ` `  `# Function to find the K maximum  ` `# absolute difference with the  ` `# median of the array ` `def` `kStrongest(arr, n, k): ` `     `  `    ``# Sort the array ` `    ``arr.sort() ` `     `  `    ``# Store median ` `    ``median ``=` `findMedian(arr, n) ` `    ``diff ``=` `[``0``] ``*` `(n) ` `     `  `    ``# Find and store difference ` `    ``for` `i ``in` `range``(n): ` `        ``diff[i] ``=` `abs``(median ``-` `arr[i]) ` `         `  `    ``i ``=` `0` `    ``j ``=` `n ``-` `1` `     `  `    ``while` `(k > ``0``): ` `         `  `        ``# If diff[i] is greater print  ` `        ``# it. Else print diff[j] ` `        ``if` `(diff[i] > diff[j]): ` `            ``print``(arr[i], end ``=` `" "``) ` `            ``i ``+``=` `1` `        ``else``: ` `            ``print``(arr[j], end ``=` `" "``) ` `            ``j ``-``=` `1` `         `  `        ``k ``-``=` `1` `     `  `# Driver code ` `arr ``=` `[ ``1``, ``2``, ``3``, ``4``, ``5` `] ` `k ``=` `3` `n ``=` `len``(arr) ` ` `  `kStrongest(arr, n, k) ` ` `  `# This code is contributed by sanjoy_62 `

## C#

 `// C# implementation to find first K ` `// elements whose difference with the  ` `// median of array is maximum ` `using` `System; ` ` `  `class` `GFG{ ` ` `  `// Function for calculating median  ` `static` `double` `findMedian(``int` `[]a, ``int` `n)  ` `{ ` `    ``// Check for even case  ` `    ``if` `(n % 2 != 0)  ` `        ``return` `(``double``)a[n / 2];  ` `         `  `    ``return` `(``double``)(a[(n - 1) / 2] +  ` `                    ``a[n / 2]) / 2.0;  ` `}  ` ` `  `// Function to find the K maximum absolute ` `// difference with the median of the array ` `static` `void` `kStrongest(``int` `[]arr, ``int` `n, ` `                                  ``int` `k) ` `{ ` `     `  `    ``// Sort the array. ` `    ``Array.Sort(arr); ` `     `  `    ``int` `i = 0; ` `     `  `    ``// Store median ` `    ``double` `median = findMedian(arr, n); ` `    ``int` `[]diff = ``new` `int``[n]; ` ` `  `    ``// Find and store difference ` `    ``for``(i = 0; i < n; i++)  ` `    ``{ ` `       ``diff[i] = (``int``)Math.Abs(median - arr[i]); ` `    ``} ` ` `  `    ``int` `j = n - 1; ` `    ``i = 0; ` `    ``while` `(k > 0)  ` `    ``{ ` `         `  `        ``// If diff[i] is greater print it ` `        ``// Else print diff[j] ` `        ``if` `(diff[i] > diff[j]) ` `        ``{ ` `            ``Console.Write(arr[i] + ``" "``); ` `            ``i++; ` `        ``} ` `        ``else` `        ``{ ` `            ``Console.Write(arr[j] + ``" "``); ` `            ``j--; ` `        ``} ` `        ``k--; ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `[]arr = { 1, 2, 3, 4, 5 }; ` `    ``int` `k = 3; ` `    ``int` `n = arr.Length; ` ` `  `    ``kStrongest(arr, n, k); ` `} ` `} ` ` `  `// This code is contributed by Rohit_ranjan `

Output:

`5 1 4` My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : Rohit_ranjan, sanjoy_62