Given an array of size **N**. The task is to remove minimum elements from the array such that twice of minimum number is greater than the maximum number in the modified array. Print the minimum number of elements removed.

**Examples:**

Input:arr[] = {4, 5, 100, 9, 10, 11, 12, 15, 200}

Output:4

Remove 4 elements (4, 5, 100, 200)

so that 2*min becomes more than max.

Input:arr[] = {4, 7, 5, 6}

Output:0

**Approach: **

- sort the given array
- Traverse from left to right in the array and for each element chosen (let it be x) with the index i, find the upper_bound of (2*x). let that index be j.Then, update the our required answer by (n-j+i) if (n-j+i) is less than current value of our answer .

Below is the implementation of the above approach :

## C++

`// CPP program to remove minimum elements from the ` `// array such that 2*min becomes more than max ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to remove minimum elements from the ` `// array such that 2*min becomes more than max ` `int` `Removal(vector<` `int` `> v, ` `int` `n) ` `{ ` ` ` `// Sort the array ` ` ` `sort(v.begin(), v.end()); ` ` ` ` ` `// To store the required answer ` ` ` `int` `ans = INT_MAX; ` ` ` ` ` `// Traverse from left to right ` ` ` `for` `(vector<` `int` `>::iterator i = v.begin(); i != v.end(); ` ` ` `i++) { ` ` ` ` ` `vector<` `int` `>::iterator j = upper_bound(v.begin(), ` ` ` `v.end(), (2 * (*i))); ` ` ` ` ` `// Update the answer ` ` ` `ans = min(ans, n - (` `int` `)(j - i)); ` ` ` `} ` ` ` ` ` `// Return the required answer ` ` ` `return` `ans; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `vector<` `int` `> a = { 4, 5, 100, 9, 10, 11, 12, 15, 200 }; ` ` ` ` ` `int` `n = a.size(); ` ` ` ` ` `// Function call ` ` ` `cout << Removal(a, n); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to remove minimum elements from the ` `// array such that 2*min becomes more than max ` `import` `java.util.Arrays; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to calculate upper bound ` ` ` `public` `static` `int` `upperBound(` `int` `[] array, ` ` ` `int` `value) ` ` ` `{ ` ` ` `int` `low = ` `0` `; ` ` ` `int` `high = array.length; ` ` ` `while` `(low < high) ` ` ` `{ ` ` ` `final` `int` `mid = (low + high) / ` `2` `; ` ` ` `if` `(value >= array[mid]) ` ` ` `{ ` ` ` `low = mid + ` `1` `; ` ` ` `} ` ` ` `else` ` ` `{ ` ` ` `high = mid; ` ` ` `} ` ` ` `} ` ` ` `return` `low; ` ` ` `} ` ` ` ` ` `// Function to remove minimum elements from the ` ` ` `// array such that 2*min becomes more than max ` ` ` `public` `static` `int` `Removal(` `int` `[] v, ` `int` `n) ` ` ` `{ ` ` ` ` ` `// Sort the array ` ` ` `Arrays.sort(v); ` ` ` ` ` `// To store the required answer ` ` ` `int` `ans = Integer.MAX_VALUE; ` ` ` `int` `k = ` `0` `; ` ` ` ` ` `// Traverse from left to right ` ` ` `for` `(` `int` `i : v) ` ` ` `{ ` ` ` `int` `j = upperBound(v, (` `2` `* i)); ` ` ` ` ` `// Update the answer ` ` ` `ans = Math.min(ans, n - (j - k)); ` ` ` `k++; ` ` ` `} ` ` ` ` ` `// Return the required answer ` ` ` `return` `ans; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `main(String[] args) ` ` ` `{ ` ` ` `int` `[] a = { ` `4` `, ` `5` `, ` `100` `, ` `9` `, ` `10` `, ` ` ` `11` `, ` `12` `, ` `15` `, ` `200` `}; ` ` ` `int` `n = a.length; ` ` ` ` ` `// Function call ` ` ` `System.out.println(Removal(a, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by ` `// sanjeev2552 ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to remove minimum elements from the ` `# array such that 2*min becomes more than max ` `from` `bisect ` `import` `bisect_left as upper_bound ` ` ` `# Function to remove minimum elements from the ` `# array such that 2*min becomes more than max ` `def` `Removal(v, n): ` ` ` ` ` `# Sort the array ` ` ` `v ` `=` `sorted` `(v) ` ` ` ` ` `# To store the required answer ` ` ` `ans ` `=` `10` `*` `*` `9` ` ` ` ` `# Traverse from left to right ` ` ` `for` `i ` `in` `range` `(` `len` `(v)): ` ` ` `j ` `=` `upper_bound(v, (` `2` `*` `(a[i]))) ` ` ` ` ` `# Update the answer ` ` ` `ans ` `=` `min` `(ans, n ` `-` `(j ` `-` `i ` `-` `1` `)) ` ` ` ` ` `# Return the required answer ` ` ` `return` `ans ` ` ` `# Driver code ` `a ` `=` `[` `4` `, ` `5` `, ` `100` `, ` `9` `, ` `10` `, ` `11` `, ` `12` `, ` `15` `, ` `200` `] ` ` ` `n ` `=` `len` `(a) ` ` ` `# Function call ` `print` `(Removal(a, n)) ` ` ` `# This code is contributed by Mohit Kumar ` |

*chevron_right*

*filter_none*

## C#

`// C# program to remove minimum elements ` `// from the array such that 2*min becomes ` `// more than max ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to calculate upper bound ` ` ` `public` `static` `int` `upperBound(` `int` `[] array, ` ` ` `int` `value) ` ` ` `{ ` ` ` `int` `low = 0; ` ` ` `int` `high = array.Length; ` ` ` `while` `(low < high) ` ` ` `{ ` ` ` `int` `mid = (low + high) / 2; ` ` ` `if` `(value >= array[mid]) ` ` ` `{ ` ` ` `low = mid + 1; ` ` ` `} ` ` ` `else` ` ` `{ ` ` ` `high = mid; ` ` ` `} ` ` ` `} ` ` ` `return` `low; ` ` ` `} ` ` ` ` ` `// Function to remove minimum elements from the ` ` ` `// array such that 2*min becomes more than max ` ` ` `public` `static` `int` `Removal(` `int` `[] v, ` `int` `n) ` ` ` `{ ` ` ` ` ` `// Sort the array ` ` ` `Array.Sort(v); ` ` ` ` ` `// To store the required answer ` ` ` `int` `ans = ` `int` `.MaxValue; ` ` ` `int` `k = 0; ` ` ` ` ` `// Traverse from left to right ` ` ` `foreach` `(` `int` `i ` `in` `v) ` ` ` `{ ` ` ` `int` `j = upperBound(v, (2 * i)); ` ` ` ` ` `// Update the answer ` ` ` `ans = Math.Min(ans, n - (j - k)); ` ` ` `k++; ` ` ` `} ` ` ` ` ` `// Return the required answer ` ` ` `return` `ans; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `Main(String[] args) ` ` ` `{ ` ` ` `int` `[] a = { 4, 5, 100, 9, 10, ` ` ` `11, 12, 15, 200 }; ` ` ` `int` `n = a.Length; ` ` ` ` ` `// Function call ` ` ` `Console.WriteLine(Removal(a, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Rajput-Ji ` |

*chevron_right*

*filter_none*

**Output :**

4

**Time complexity:** O(NlogN)

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.

## Recommended Posts:

- Remove minimum elements from either side such that 2*min becomes more than max
- Remove minimum elements from either side such that 2*min becomes more than max | Set 2
- Length of longest subarray in which elements greater than K are more than elements not greater than K
- Remove elements from the array which appear more than k times
- Minimum value to be assigned to the elements so that sum becomes greater than initial sum
- Remove exactly one element from the array such that max - min is minimum
- Adding elements of an array until every element becomes greater than or equal to k
- Remove characters from a numeric string such that string becomes divisible by 8
- Find minimum value to assign all array elements so that array product becomes greater
- Remove minimum elements from array so that max <= 2 * min
- Convert the array such that the GCD of the array becomes 1
- Insert minimum number in array so that sum of array becomes prime
- Given an array of size n and a number k, find all elements that appear more than n/k times
- Array elements that appear more than once
- Rearrange an array such that 'arr[j]' becomes 'i' if 'arr[i]' is 'j' | Set 1
- Sum of elements in 1st array such that number of elements less than or equal to them in 2nd array is maximum
- Ways to place 4 items in n^2 positions such that no row/column contains more than one
- Find maximum N such that the sum of square of first N natural numbers is not more than X
- Remove Minimum coins such that absolute difference between any two piles is less than K
- Arrange N elements in circular fashion such that all elements are strictly less than sum of adjacent elements

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.