Minimum replacements to make elements of a ternary array same

Given a ternary array (every element has one the three possible values 1, 2 and 3). Our task is to replace the minimum number of numbers in it so that all the numbers in the array are equal to each other.

Examples:

Input :  arr[] = 1 3 2 2 2 1 1 2 3
Output : 5
In this example, frequency of 1 is 3, 
frequency of 2 is 4 and frequency of 3
is 2. As we can see that 2 is having the 
more frequency than 1 and 3. So, if we 
replace all the 1's and 3's by 2 then, 
the resultant array has all the elements 
equal to each other in minimum replacements.
Here, total no. of 1's and 3's is 5 so it
takes 5 replacements to replace them by 2. 
Hence, the output is 5.

Input : arr[] = 3 3 2 2 1 3
Output : 3
In this example, 3 has the max frequency.
Hence, minimum number of replacements are 
3 to replace 1 and 2 by 3. Hence, the output
is 3.

The approach is to calculate frequency of each element of the given array. Then, the difference of n(no. of elements) and max_frequency(frequency of the element occurs maximum time in the array) will be minimum number of replacements needed.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program minimum number of replacements
// needed to be performed to make all the numbers
// in the given array equal.
#include <bits/stdc++.h>
using namespace std;
  
int minReplacements(int arr[], int n)
{
    // Find the most frequent element
    int freq[3] = { 0 };
    for (int i = 0; i < n; i++)
        freq[arr[i] - 1]++;
    int max_freq = *max_element(freq, freq + 3);
  
    // Returning count of replacing other elements
    // with the most frequent.
    return (n - max_freq);
}
  
// Driver Function
int main()
{
    int arr[] = { 1, 3, 2, 2, 2, 1, 1, 2, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << minReplacements(arr, n) << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program minimum 
// number of replacements 
// needed to be performed 
// to make all the numbers 
// in the given array equal
import java .io.*;
import java .util.*;
  
class GFG 
{
  
// Function for 
// minimum replacements
static int minReplacements(int []arr, 
                           int n)
{
    // Find the most
    // frequent element
    int []freq = new int[3];
    for (int i = 0; i < n; i++)
        freq[arr[i] - 1]++;
        Arrays.sort(freq);
    int max_freq = freq[2];
  
    // Returning count of 
    // replacing other elements 
    // with the most frequent
    return (n - max_freq);
}
  
// Driver code
static public void main (String[] args)
{
    int []arr = {1, 3, 2, 2
                 2, 1, 1, 2, 3};
    int n = arr.length;
    System.out.println(minReplacements(arr, n));
}
}
  
// This code is contributed 
// by anuj_67.

chevron_right


Python 3

# Python 3 program minimum number of
# replacements needed to be performed
# to make all the numbers in the given
# array equal.

def minReplacements(arr, n):

# Find the most frequent element
freq = [0] * 3
for i in range(n):
freq[arr[i] – 1] += 1
freq.sort()
max_freq = freq[2]

# Returning count of replacing other
# elements with the most frequent.
return (n – max_freq)

# Driver Code
if __name__ == “__main__”:

arr = [ 1, 3, 2, 2,
2, 1, 1, 2, 3 ]
n = len(arr)
print( minReplacements(arr, n) )

# This code is contributed
# by ChitraNayal

C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program minimum number of
// replacements needed to be 
// performed to make all the
// numbers in the given array equal
using System;
using System.Linq;
  
public class GFG 
{
  
// Function for minimum replacements
static int minReplacements(int []arr, int n)
{
    // Find the most frequent element
    int []freq = new int[3];
    for (int i = 0; i < n; i++)
        freq[arr[i] - 1]++;
    int max_freq = freq.Max();
  
    // Returning count of replacing other
    // elements with the most frequent
    return (n - max_freq);
}
  
    // Driver code
    static public void Main ()
    {
        int []arr = {1, 3, 2, 2, 2, 1, 1, 2, 3};
        int n = arr.Length;
        Console.WriteLine(minReplacements(arr, n));
      
    }
}
  
// This code is contributed by vt_m.

chevron_right



Output:

5


My Personal Notes arrow_drop_up

Intern at GeeksforGeeks

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.



Improved By : vt_m, Ita_c



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.