Minimum delete operations to make all elements of array same

08 Jul, 2022
Given an array of n elements such that elements may repeat. We can delete any number of elements from the array. The task is to find a minimum number of elements to be deleted from the array to make it equal.Examples:
Input: arr[] = {4, 3, 4, 4, 2, 4}
Output: 2
After deleting 2 and 3 from array, array becomes 
arr[] = {4, 4, 4, 4} 

Input: arr[] = {1, 2, 3, 4, 5}
Output: 4
We can delete any four elements from array.
In this problem, we need to minimize the delete operations. The approach is simple, we count the frequency of each element in an array, then find the frequency of the most frequent elements in count array. Let this frequency be max_freq. To get the minimum number of elements to be deleted from the array calculate n – max_freq where n is a number of elements in the given array.
C++
Java
Python3
C#
Javascript
// C++ program to find minimum// number of deletes required// to make all elements same.#include <bits/stdc++.h>using namespace std; // Function to get minimum number of elements to be deleted// from array to make array elements equalint minDelete(int arr[], int n){    // Create an hash map and store frequencies of all    // array elements in it using element as key and    // frequency as value    unordered_map<int, int> freq;    for (int i = 0; i < n; i++)        freq[arr[i]]++;     // Find maximum frequency among all frequencies.    int max_freq = INT_MIN;    for (auto itr = freq.begin(); itr != freq.end(); itr++)        max_freq = max(max_freq, itr->second);     // To minimize delete operations, we remove all    // elements but the most frequent element.    return n - max_freq;} // Driver program to run the caseint main(){    int arr[] = { 4, 3, 4, 4, 2, 4 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << minDelete(arr, n);    return 0;}
// Java program to find minimum number// of deletes required to make all// elements same.import java.util.*; class GFG{ // Function to get minimum number of// elements to be deleted from array// to make array elements equalstatic int minDelete(int arr[], int n){         // Create an hash map and store    // frequencies of all array elements    // in it using element as key and    // frequency as value    HashMap<Integer, Integer> freq = new HashMap<>();    for(int i = 0; i < n; i++)        freq.put(arr[i], freq.getOrDefault(arr[i], 0) + 1);     // Find maximum frequency among all frequencies.    int max_freq = Integer.MIN_VALUE;    for(Map.Entry<Integer,                  Integer> entry : freq.entrySet())        max_freq = Math.max(max_freq,                            entry.getValue());     // To minimize delete operations,    // we remove all elements but the    // most frequent element.    return n - max_freq ;} // Driver codepublic static void main(String[] args){    int arr[] = { 4, 3, 4, 4, 2, 4 };    int n = arr.length;         System.out.print(minDelete(arr, n));}} // This code is contributed by amal kumar choubey and corrected by Leela Kotte
# Python3 program to find minimum# number of deletes required to# make all elements same. # Function to get minimum number# of elements to be deleted from# array to make array elements equaldef minDelete(arr, n):         # Create an dictionary and store    # frequencies of all array    # elements in it using    # element as key and    # frequency as value    freq = {}    for i in range(n):        if arr[i] in freq:            freq[arr[i]] += 1        else:            freq[arr[i]] = 1;              # Find maximum frequency    # among all frequencies.    max_freq = 0;    for i, j in freq.items():        max_freq = max(max_freq, j);     # To minimize delete operations,    # we remove all elements but the    # most frequent element.    return n - max_freq;     # Driver codearr = [ 4, 3, 4, 4, 2, 4 ];n = len(arr) print(minDelete(arr, n)); # This code is contributed by grand_master
// C# program to find minimum number// of deletes required to make all// elements same.using System;using System.Collections.Generic;class GFG {     // Function to get minimum number of    // elements to be deleted from array    // to make array elements equal    static int minDelete(int[] arr, int n)    {         // Create an hash map and store        // frequencies of all array elements        // in it using element as key and        // frequency as value        Dictionary<int, int> freq            = new Dictionary<int, int>();        for (int i = 0; i < n; i++)            if (freq.ContainsKey(arr[i]))            {                freq[arr[i]] = freq[arr[i]] + 1;            }            else            {                freq.Add(arr[i], 1);            }         // Find maximum frequency among all frequencies.        int max_freq = int.MinValue;        foreach(KeyValuePair<int, int> entry in freq)            max_freq = Math.Max(max_freq, entry.Value);         // To minimize delete operations,        // we remove all elements but the        // most frequent element.        return n - max_freq + 1;    }     // Driver code    public static void Main(String[] args)    {        int[] arr = {4, 3, 4, 4, 2, 4};        int n = arr.Length;          Console.Write(minDelete(arr, n));    }} // This code is contributed by Amit Katiyar
<script>// Javascript program to find minimum number// of deletes required to make all// elements same. // Function to get minimum number of// elements to be deleted from array// to make array elements equalfunction minDelete(arr, n){         // Create an hash map and store    // frequencies of all array elements    // in it using element as key and    // frequency as value    let freq = new Map();    for(let i = 0; i < n; i++){        if(freq.has(arr[i])){            freq.set(arr[i], freq.get(arr[i]) + 1)        }else{            freq.set(arr[i], 1)        }    }     // Find maximum frequency among all frequencies.    let max_freq = Number.MIN_SAFE_INTEGER;    for(let entry of freq)        max_freq = Math.max(max_freq, entry[1]);     // To minimize delete operations,    // we remove all elements but the    // most frequent element.    return n - max_freq ;} // Driver code    let arr = [4, 3, 4, 4, 2, 4 ];    let n = arr.length;         document.write(minDelete(arr, n)); // This code is contributed by _saurabh_jaiswal.</script>
Output:
2
Time complexity: O(n)
Auxiliary Space: O(n)
Note: Here we can optimize the extra space to count the frequency of each element to O(1) but for this, we have to modify our original array. See this article.
This article is contributed by Aarti_Rathi and Shashank Mishra ( Gullu ). 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.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
grand_master
Amal Kumar Choubey
amit143katiyar
nakshatra2139
_saurabh_jaiswal
codewithmini
STL
Arrays
Hash
Arrays
Hash
STL
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.