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

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.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// CPP 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

 `# Python 3 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

 ` `

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++

 `// CPP 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 ` `?> `

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.