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

• Difficulty Level : Medium
• Last Updated : 04 Jun, 2022

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 :

```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[6] = { 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(k n Logn)
Auxiliary Space: O(1)

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[0]);` `    ``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)
Auxiliary Space: O(1)

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