Skip to content
Related Articles

Related Articles

Improve Article

Minimum changes required to make all element in an array equal

  • Difficulty Level : Basic
  • Last Updated : 11 May, 2021
Geek Week

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




// 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 equal
int 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 code
int main()
{
 
    int arr[] = { 2, 3, 3, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    // Function call
    cout << minChanges(arr, n) << '\n';
 
    return 0;
}

Java




// Java program to find minimum
// changes required to make
// all elements of the array equal
import 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#




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




# 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 equal
def 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 call
print(minChanges(arr, n))

Javascript




<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 equal
function 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 code
var arr = [ 2, 3, 3, 4 ];
var n = arr.length;
// Function call
document.write( minChanges(arr, n) + '<br>');
 
</script>
Output: 
2

 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :