Minimum operation to make all elements equal in array

Given an array with n positive integers. We need to find the minimum number of operation to make all elements equal. We can perform addition, multiplication, subtraction or division with any element on an array element.

Examples:

Input : arr[] = {1, 2, 3, 4}
Output : 3
Since all elements are different, 
we need to perform at least three
operations to make them same. For
example, we can make them all 1
by doing three subtractions. Or make
them all 3 by doing three additions.

Input : arr[] = {1, 1, 1, 1}
Output : 0


For making all elements equal you can select a target value and then you can make all elements equal to that. Now, for converting a single element to target value you can perform a single operation only once. In this manner you can achieve your task in maximum of n operations but you have to minimize this number of operation and for this your selection of target is very important because if you select a target whose frequency in array is x then you have to perform only n-x more operations as you have already x elements equal to your target value. So finally, our task is reduced to finding the element with maximum frequency. This can be achieved by different means such as iterative method in O(n^2), sorting in O(nlogn) and hashing in O(n) time complexity.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the minimum number of 
// operations required to make all elements 
// of array equal
#include <bits/stdc++.h>
using namespace std;
  
// function for min operation 
int minOperation (int arr[], int n) 
{
    // Insert all elements in hash. 
    unordered_map<int, int> hash; 
    for (int i=0; i<n; i++)
        hash[arr[i]]++;
  
    // find the max frequency
    int max_count = 0;
    for (auto i : hash)
        if (max_count < i.second)
            max_count = i.second;
  
    // return result
    return (n - max_count); 
}
  
// driver program
int main()
{
    int arr[] = {1, 5, 2, 1, 3, 2, 1};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << minOperation(arr, n);
    return 0;

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// JAVA Code For Minimum operation to make
// all elements equal in array
import java.util.*;
  
class GFG {
      
    // function for min operation 
    public static int minOperation (int arr[], int n) 
    {
        // Insert all elements in hash. 
       HashMap<Integer, Integer> hash = new HashMap<Integer, 
                                           Integer>(); 
          
        for (int i=0; i<n; i++)
            if(hash.containsKey(arr[i]))
                hash.put(arr[i], hash.get(arr[i])+1);
            else hash.put(arr[i], 1);
          
        // find the max frequency
        int max_count = 0;
        Set<Integer> s = hash.keySet(); 
          
        for (int i : s)
            if (max_count < hash.get(i))
                max_count = hash.get(i);
       
        // return result
        return (n - max_count); 
    }
      
    /* Driver program to test above function */
    public static void main(String[] args) 
    {
        int arr[] = {1, 5, 2, 1, 3, 2, 1};
        int n = arr.length;
        System.out.print(minOperation(arr, n));
              
    }
}
    
// This code is contributed by Arnav Kr. Mandal.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the minimum 
# number of operations required to 
# make all elements of array equal 
from collections import defaultdict
  
# Function for min operation 
def minOperation(arr, n): 
  
    # Insert all elements in hash. 
    Hash = defaultdict(lambda:0
    for i in range(0, n): 
        Hash[arr[i]] += 1
  
    # find the max frequency 
    max_count = 0
    for i in Hash
        if max_count < Hash[i]: 
            max_count = Hash[i] 
  
    # return result 
    return n - max_count 
  
# Driver Code
if __name__ == "__main__"
  
    arr = [1, 5, 2, 1, 3, 2, 1
    n = len(arr) 
    print(minOperation(arr, n))
      
# This code is contributed 
# by Rituraj Jain

chevron_right



Output:

4

This article is contributed by Shivam Pradhan (anuj_charm). 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : rituraj_jain



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.