# Minimum number of elements to add to make median equals x

• Difficulty Level : Medium
• Last Updated : 26 Mar, 2021

A median in an array with the length of n is an element which occupies position number (n+1)/2 after we sort the elements in the non-decreasing order (the array elements are numbered starting with 1). A median of an array (2, 6, 1, 2, 3) is the number 2, and a median of array (0, 96, 17, 23) — the number 17.

Examples :

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```Input : 3 10
10 20 30
Output : 1
In the first sample we can add number 9
to array (10, 20, 30). The resulting array
(9, 10, 20, 30) will have a median in
position (4+1)/2 = 2, that is, 10

Input : 3 4
1 2 3
Output : 4
In the second sample you should add numbers
4, 5, 5, 5. The resulting array has median
equal to 4.```

First Approach:- The approach is to add one more number x to the array until the median of the array equals to x. Below is the implementation of the above approach:-

## C++

 `// C++ program to find minimum number``// of elements needs to add to the``// array so that its median equals x.``#include ``using` `namespace` `std;` `// Returns count of elements to be``// added to make median x. This function``// assumes that a[] has enough extra space.``int` `minNumber(``int` `a[], ``int` `n, ``int` `x)``{   ``    ``// to sort the array in increasing order.``    ``sort(a, a + n);` `    ``int` `k;``    ``for` `(k = 0; a[(n - 1) / 2] != x; k++) {``        ``a[n++] = x;``        ``sort(a, a + n);``    ``}``    ``return` `k;``}` `// Driver code``main()``{``    ``int` `x = 10;``    ``int` `a = { 10, 20, 30 };``    ``int` `n = 3;``    ``cout << minNumber(a, n, x) << endl;``    ``return` `0;``}`

## Java

 `// Java program to find minimum number``// of elements needs to add to the``// array so that its median equals x.``import` `java.util.Arrays;` `class` `GFG``{` `// Returns count of elements to be``// added to make median x. This function``// assumes that a[] has enough extra space.``static` `int` `minNumber(``int` `a[], ``int` `n, ``int` `x)``{``    ``// to sort the array in increasing order.``    ``Arrays.sort(a);` `    ``int` `k;``    ``for` `(k = ``0``; a[(n) / ``2``] != x; k++)``    ``{``        ``a[n++] = x;``        ``Arrays.sort(a);``    ``}``    ``return` `k;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `x = ``10``;``    ``int` `a[] = { ``10``, ``20``, ``30` `};``    ``int` `n = ``3``;``    ``System.out.println(minNumber(a, n-``1``, x));``}``}` `// This code has been contributed by 29AjayKumar`

## Python3

 `# Python3 program to find minimum number``# of elements needs to add to the``# array so that its median equals x.` `# Returns count of elements to be added ``# to make median x. This function``# assumes that a[] has enough extra space.``def` `minNumber(a, n, x):``    ` `    ``# to sort the array in increasing order.``    ``a.sort(reverse ``=` `False``)``    ``k ``=` `0``    ``while``(a[``int``((n ``-` `1``) ``/` `2``)] !``=` `x):``        ``a[n ``-` `1``] ``=` `x``        ``n ``+``=` `1``        ``a.sort(reverse ``=` `False``)``        ``k ``+``=` `1` `    ``return` `k` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``x ``=` `10``    ``a ``=` `[``10``, ``20``, ``30``]``    ``n ``=` `3``    ``print``(minNumber(a, n, x))` `# This code is contributed by``# Surendra_Gangwar`

## C#

 `// C# program to find minimum number``// of elements needs to add to the``// array so that its median equals x.``using` `System;` `class` `GFG``{` `// Returns count of elements to be``// added to make median x. This function``// assumes that a[] has enough extra space.``static` `int` `minNumber(``int` `[]a, ``int` `n, ``int` `x)``{``    ``// to sort the array in increasing order.``    ``Array.Sort(a);` `    ``int` `k;``    ``for` `(k = 0; a[(n) / 2] != x; k++)``    ``{``        ``a[n++] = x;``        ``Array.Sort(a);``    ``}``    ``return` `k;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `x = 10;``    ``int` `[]a = { 10, 20, 30 };``    ``int` `n = 3;``    ``Console.WriteLine(minNumber(a, n-1, x));``}``}` `// This code contributed by Rajput-Ji`

## PHP

 ``

## Javascript

 ``

Output :

`1`

Time complexity : O(knLogn)

Second Approach:- Better approach is to count all the elements equal to x(that is e), greater than x(that is h) and smaller than x(that is l). And then –
if l is greater than h then, the ans will be (l – h) + 1 – e;
And if h is greater than l then, ans will be (h – l – 1) + 1 – e;
We can use Hoare’s partition scheme to count smaller, equal and greater elements.

Below is the implementation of the above approach:

## C++

 `// C++ program to find minimum number of``// elements to add so that its median``// equals x.``#include ``using` `namespace` `std;` `int` `minNumber(``int` `a[], ``int` `n, ``int` `x)``{``    ``int` `l = 0, h = 0, e = 0;``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// no. of elements equals to x,``        ``// that is, e.``        ``if` `(a[i] == x)``            ``e++;` `        ``// no. of elements greater than x,``        ``// that is, h.``        ``else` `if` `(a[i] > x)``            ``h++;` `        ``// no. of elements smaller than x,``        ``// that is, l.``        ``else` `if` `(a[i] < x)``            ``l++;``    ``}` `    ``int` `ans = 0;``    ``if` `(l > h)``        ``ans = l - h;``    ``else` `if` `(l < h)``        ``ans = h - l - 1;``    ` `    ``// subtract the no. of elements``    ``// that are equal to x.``    ``return` `ans + 1 - e;``}` `// Driver code``int` `main()``{``    ``int` `x = 10;``    ``int` `a[] = { 10, 20, 30 };``    ``int` `n = ``sizeof``(a) / ``sizeof``(a);``    ``cout << minNumber(a, n, x) << endl;``    ``return` `0;``}`

## Java

 `// Java program to find minimum number``// of elements to add so that its``// median equals x.``import` `java.util.*;``import` `java.lang.*;` `class` `GFG {` `    ``public` `static` `int` `minNumber(``int` `a[],``                           ``int` `n, ``int` `x)``    ``{``        ``int` `l = ``0``, h = ``0``, e = ``0``;``        ``for` `(``int` `i = ``0``; i < n; i++)``        ``{` `            ``// no. of elements equals to``            ``// x, that is, e.``            ``if` `(a[i] == x)``                ``e++;` `            ``// no. of elements greater``            ``// than x, that is, h.``            ``else` `if` `(a[i] > x)``                ``h++;` `            ``// no. of elements smaller``            ``// than x, that is, l.``            ``else` `if` `(a[i] < x)``                ``l++;``        ``}` `        ``int` `ans = ``0``;``        ``if` `(l > h)``            ``ans = l - h;``        ``else` `if` `(l < h)``            ``ans = h - l - ``1``;``    ` `        ``// subtract the no. of elements``        ``// that are equal to x.``        ``return` `ans + ``1` `- e;``    ``}` `    ``// Driven Program``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `x = ``10``;``        ``int` `a[] = { ``10``, ``20``, ``30` `};``        ``int` `n = a.length;``        ``System.out.println(``                      ``minNumber(a, n, x));``    ``}``}` `// This code is contributed by``// Prasad Kshirsagar`

## Python3

 `# Python3 program to find minimum number``# of elements to add so that its median``# equals x.` `def` `minNumber (a, n, x):``    ``l ``=` `0``    ``h ``=` `0``    ``e ``=` `0``    ``for` `i ``in` `range``(n):``    ` `        ``# no. of elements equals to x,``        ``# that is, e.``        ``if` `a[i] ``=``=` `x:``            ``e``+``=``1``        ` `        ``# no. of elements greater than x,``        ``# that is, h.``        ``elif` `a[i] > x:``            ``h``+``=``1``        ` `        ``# no. of elements smaller than x,``        ``# that is, l.``        ``elif` `a[i] < x:``            ``l``+``=``1``    ` `    ``ans ``=` `0``;``    ``if` `l > h:``        ``ans ``=` `l ``-` `h``    ``elif` `l < h:``        ``ans ``=` `h ``-` `l ``-` `1``;``    ` `    ``# subtract the no. of elements``    ``# that are equal to x.``    ``return` `ans ``+` `1` `-` `e` `# Driver code``x ``=` `10``a ``=` `[``10``, ``20``, ``30``]``n ``=` `len``(a)``print``(minNumber(a, n, x))` `# This code is contributed``# by "Abhishek Sharma 44"`

## C#

 `// C# program to find minimum``// number of elements to add``// so that its median equals x.``using` `System;` `class` `GFG``{``public` `static` `int` `minNumber(``int` `[]a,``                            ``int` `n,``                            ``int` `x)``{``    ``int` `l = 0, h = 0, e = 0;``    ``for` `(``int` `i = 0; i < n; i++)``    ``{` `        ``// no. of elements``        ``// equals to x,``        ``// that is, e.``        ``if` `(a[i] == x)``            ``e++;` `        ``// no. of elements``        ``// greater than x,``        ``// that is, h.``        ``else` `if` `(a[i] > x)``            ``h++;` `        ``// no. of elements smaller``        ``// than x, that is, l.``        ``else` `if` `(a[i] < x)``            ``l++;``    ``}` `    ``int` `ans = 0;``    ``if` `(l > h)``        ``ans = l - h;``    ``else` `if` `(l < h)``        ``ans = h - l - 1;` `    ``// subtract the no.``    ``// of elements that``    ``// are equal to x.``    ``return` `ans + 1 - e;``}` `// Driver Code``public` `static` `void` `Main()``{``    ``int` `x = 10;``    ``int` `[]a = {10, 20, 30};``    ``int` `n = a.Length;``    ``Console.WriteLine(``                ``minNumber(a, n, x));``}``}` `// This code is contributed``// by anuj_67.`

## PHP

 ` ``\$x``)``            ``\$h``++;` `        ``// no. of elements smaller``        ``// than x, that is, l.``        ``else` `if` `(``\$a``[``\$i``] < ``\$x``)``            ``\$l``++;``    ``}` `    ``\$ans` `= 0;``    ``if` `(``\$l` `> ``\$h``)``        ``\$ans` `= ``\$l` `- ``\$h``;``    ``else` `if` `(``\$l` `< ``\$h``)``        ``\$ans` `= ``\$h` `- ``\$l` `- 1;``    ` `    ``// subtract the no. of elements``    ``// that are equal to x.``    ``return` `\$ans` `+ 1 - ``\$e``;``}` `// Driver code``\$x` `= 10;``\$a` `= ``array` `(10, 20, 30);``\$n` `= sizeof(``\$a``) ;``echo` `minNumber(``\$a``, ``\$n``, ``\$x``), ``"\n"``;` `// This code is contributed by jit_t``?>`

## Javascript

 ``

Output :

`1`

Time complexity : O(n)

This article is contributed by Sagar Shukla. 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.