Minimum changes required to make all element in an array equal

20 Feb, 2022
Given an array of length N, the task is to find minimum operation required to make all elements in the array equal. Operation is as follows: 
Replace the value of one element of the array by one of its adjacent elements.
Examples: 
Input: N = 4, arr[] = {2, 3, 3, 4} 
Output: 2
Explanation:
Replace 2 and 4 by 3

Input: N = 4, arr[] = { 1, 2, 3, 4}
Output: 3
Approach:Let us assume that after performing the required minimum changes all elements of the array will become X. It is given that we are only allowed to replace the value of an element of the array with its adjacent element, So X should be one of the elements of the array.Also, as we need to make changes as minimum as possible X should be the maximum occurring element of the array. Once we find the value of X, we need only one change per non-equal element (elements which are not X) to make all elements of the array equal to X.  
Find the count of the maximum occurring element of the array.
Minimum changes required to make all elements of the array equal is count of all elements – count of maximum occurring element
Below is the implementation of the above approach: 
CPP
Java
C#
Python3
Javascript
// C++ program to find minimum// changes required to make// all elements of the array equal#include <bits/stdc++.h>using namespace std; // Function to count// of minimum changes// required to make all// elements equalint minChanges(int arr[], int n){     unordered_map<int, int> umap;     // Store the count of    // each element as key    // value pair in unordered map    for (int i = 0; i < n; i++) {        umap[arr[i]]++;    }     int maxFreq = 0;     // Find the count of    // maximum occurring element    for (auto p : umap) {        maxFreq = max(maxFreq, p.second);    }     // Return count of all    // element minus count    // of maximum occurring element    return n - maxFreq;} // Driver codeint main(){     int arr[] = { 2, 3, 3, 4 };    int n = sizeof(arr) / sizeof(arr[0]);     // Function call    cout << minChanges(arr, n) << '\n';     return 0;}
// Java program to find minimum// changes required to make// all elements of the array equalimport java.util.*; class GFG {     // Function to count of minimum changes    // required to make all elements equal    static int minChanges(int arr[], int n)    {         Map<Integer, Integer> mp = new HashMap<>();         // Store the count of each element        // as key value pair in map        for (int i = 0; i < n; i++) {            if (mp.containsKey(arr[i])) {                mp.put(arr[i], mp.get(arr[i]) + 1);            }             else {                mp.put(arr[i], 1);            }        }         int maxElem = 0;         // Traverse through map and        // find the maximum occurring element        for (Map.Entry<Integer, Integer> entry :             mp.entrySet()) {             maxElem = Math.max(maxElem, entry.getValue());        }         // Return count of all element minus        // count of maximum occurring element        return n - maxElem;    }     // Driver code    public static void main(String[] args)    {         int arr[] = { 2, 3, 3, 4 };         int n = arr.length;         // Function call        System.out.println(minChanges(arr, n));    }}
// C# program to find minimum// changes required to make// all elements of the array equal using System;using System.Collections.Generic; class GFG {     // Function to count of minimum changes    // required to make all elements equal    static int minChanges(int[] arr, int n)    {         Dictionary<int, int> mp            = new Dictionary<int, int>();         // Store the count of each element        // as key-value pair in Dictionary         for (int i = 0; i < n; i++) {            if (mp.ContainsKey(arr[i])) {                var val = mp[arr[i]];                mp.Remove(arr[i]);                mp.Add(arr[i], val + 1);            }            else {                mp.Add(arr[i], 1);            }        }         int maxElem = 0;         // Traverse through the Dictionary and        // find the maximum occurring element        foreach(KeyValuePair<int, int> entry in mp)        {            maxElem = Math.Max(maxElem, entry.Value);        }         // Return count of all element minus        // count of maximum occurring element        return n - maxElem;    }     // Driver code    public static void Main(string[] args)    {         int[] arr = { 2, 3, 3, 4 };         int n = arr.Length;         // Function call        Console.WriteLine(minChanges(arr, n));    }}
# Python3 program to find minimum# changes required to make# all elements of the array equal # Function to count of minimum changes# required to make all elements equaldef minChanges(arr, n):     mp = dict()     # Store the count of each element    # as key-value pair in Dictionary     for i in range(n):        if arr[i] in mp.keys():            mp[arr[i]] += 1        else:            mp[arr[i]] = 1     maxElem = 0     # Traverse through the Dictionary and    # find the maximum occurring element     for x in mp:        maxElem = max(maxElem, mp[x])     # Return count of all element minus    # count of maximum occurring element    return n - maxElem  # Driver code arr = [2, 3, 3, 4]n = len(arr) # Function callprint(minChanges(arr, n))
<script> // Javascript program to find minimum// changes required to make// all elements of the array equal // Function to count// of minimum changes// required to make all// elements equalfunction minChanges( arr, n){     var umap = new Map();     // Store the count of    // each element as key    // value pair in unordered map    for (var i = 0; i < n; i++) {        if(umap.has(arr[i]))        {            umap.set(arr[i], umap.get(arr[i])+1);        }        else        {            umap.set(arr[i], 1);        }    }     var maxFreq = 0;     // Find the count of    // maximum occurring element    umap.forEach((values,keys)=>{        maxFreq = Math.max(maxFreq, values);    });     // Return count of all    // element minus count    // of maximum occurring element    return n - maxFreq;} // Driver codevar arr = [ 2, 3, 3, 4 ];var n = arr.length;// Function calldocument.write( minChanges(arr, n) + '<br>'); </script>
2
 
Time Complexity: O(n)
Auxiliary Space: O(n)
ssonje99
rutvik_56
subham348
Arrays
Greedy
Mathematical
Arrays
Greedy
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Stack Data Structure (Introduction and Program)
Linear Search
Dijkstra's shortest path algorithm | Greedy Algo-7
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Write a program to print all permutations of a given string
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Huffman Coding | Greedy Algo-3