Encuentre el elemento máximo entre los elementos con frecuencia mínima en una array dada

Dada una array arr[] que consta de N enteros, la tarea es encontrar el elemento máximo con la frecuencia mínima .

Ejemplos:

Entrada: arr[] = {2, 2, 5, 50, 1}
Salida: 50
Explicación:
El elemento con frecuencia mínima es {1, 5, 50}. El elemento máximo entre estos elementos es 50.

Entrada: arr[] = {3, 2, 5, 6, 1}
Salida: 6

Enfoque: el problema dado se puede resolver almacenando la frecuencia del elemento de array en un HashMap y luego encontrar el valor máximo que tiene una frecuencia mínima. Siga el siguiente paso para resolver el problema dado:

  • Almacene la frecuencia de cada elemento en un HashMap, digamos M .
  • Inicialice dos variables, digamos maxValue como INT_MIN y minFreq como INT_MAX que almacenan el elemento máximo resultante y almacenan la frecuencia mínima entre todas las frecuencias.
  • Iterar sobre el mapa M y realizar los siguientes pasos:
    • Si la frecuencia del elemento actual es menor que minFreq , actualice el valor de minFreq a la frecuencia actual y el valor de maxValue al elemento actual.
    • Si la frecuencia del elemento actual es igual a minFreq y el valor de maxValue es menor que el valor actual, actualice el valor de maxValue al elemento actual.
  • Después de completar los pasos anteriores, imprima el valor de maxValue como el elemento resultante.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the maximum element
// with the minimum frequency
int maxElementWithMinFreq(int* arr, int N)
{
    // Stores the frequency of array
    // elements
    unordered_map<int, int> mp;
 
    // Find the frequency and store
    // in the map
    for (int i = 0; i < N; i++) {
        mp[arr[i]]++;
    }
 
    // Initialize minFreq to the maximum
    // value and minValue to the minimum
    int minFreq = INT_MAX;
    int maxValue = INT_MIN;
 
    // Traverse the map mp
    for (auto x : mp) {
 
        int num = x.first;
        int freq = x.second;
 
        // If freq < minFreq, then update
        // minFreq to freq and maxValue
        // to the current element
        if (freq < minFreq) {
            minFreq = freq;
            maxValue = num;
        }
 
        // If freq is equal to the minFreq
        // and current element > maxValue
        // then update maxValue to the
        // current element
        else if (freq == minFreq
                 && maxValue < num) {
            maxValue = num;
        }
    }
 
    // Return the resultant maximum value
    return maxValue;
}
 
// Driver Code
int main()
{
    int arr[] = { 2, 2, 5, 50, 1 };
    int N = sizeof(arr) / sizeof(arr[0]);
    cout << maxElementWithMinFreq(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Function to find the maximum element
// with the minimum frequency
static int maxElementWithMinFreq(int[] arr, int N)
{
   
    // Stores the frequency of array
    // elements
    HashMap<Integer,Integer> mp = new HashMap<Integer,Integer>();
 
    // Find the frequency and store
    // in the 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);
    }
    }
 
    // Initialize minFreq to the maximum
    // value and minValue to the minimum
    int minFreq = Integer.MAX_VALUE;
    int maxValue = Integer.MIN_VALUE;
 
    // Traverse the map mp
    for (Map.Entry<Integer,Integer> x : mp.entrySet()){
 
        int num = x.getKey();
        int freq = x.getValue();
 
        // If freq < minFreq, then update
        // minFreq to freq and maxValue
        // to the current element
        if (freq < minFreq) {
            minFreq = freq;
            maxValue = num;
        }
 
        // If freq is equal to the minFreq
        // and current element > maxValue
        // then update maxValue to the
        // current element
        else if (freq == minFreq
                 && maxValue < num) {
            maxValue = num;
        }
    }
 
    // Return the resultant maximum value
    return maxValue;
}
 
// Driver Code
public static void main(String[] args)
{
    int arr[] = { 2, 2, 5, 50, 1 };
    int N = arr.length;
    System.out.print(maxElementWithMinFreq(arr, N));
 
}
}
 
// This code is contributed by shikhasingrajput

Python3

# Python 3 program for the above approach
import sys
from collections import defaultdict
 
# Function to find the maximum element
# with the minimum frequency
def maxElementWithMinFreq(arr, N):
 
    # Stores the frequency of array
    # elements
    mp = defaultdict(int)
 
    # Find the frequency and store
    # in the map
    for i in range(N):
        mp[arr[i]] += 1
 
    # Initialize minFreq to the maximum
    # value and minValue to the minimum
    minFreq = sys.maxsize
    maxValue = -sys.maxsize-1
 
    # Traverse the map mp
    for x in mp:
 
        num = x
        freq = mp[x]
 
        # If freq < minFreq, then update
        # minFreq to freq and maxValue
        # to the current element
        if (freq < minFreq):
            minFreq = freq
            maxValue = num
 
        # If freq is equal to the minFreq
        # and current element > maxValue
        # then update maxValue to the
        # current element
        elif (freq == minFreq
              and maxValue < num):
            maxValue = num
 
    # Return the resultant maximum value
    return maxValue
 
# Driver Code
if __name__ == "__main__":
 
    arr = [2, 2, 5, 50, 1]
    N = len(arr)
    print(maxElementWithMinFreq(arr, N))
 
    # This code is contributed by ukasp.

C#

// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
// Function to find the maximum element
// with the minimum frequency
static int maxElementWithMinFreq(int []arr, int N)
{
   
    // Stores the frequency of array
    // elements
    Dictionary<int, int> mp = new Dictionary<int,int>();
 
    // Find the frequency and store
    // in the map
    for (int i = 0; i < N; i++) {
        if(mp.ContainsKey(arr[i]))
        mp[arr[i]]++;
        else
          mp.Add(arr[i],1);
    }
 
    // Initialize minFreq to the maximum
    // value and minValue to the minimum
    int minFreq = Int32.MaxValue;
    int maxValue = Int32.MinValue;
 
    // Traverse the map mp
    foreach(KeyValuePair<int,int> x in mp) {
 
        int num = x.Key;
        int freq = x.Value;
 
        // If freq < minFreq, then update
        // minFreq to freq and maxValue
        // to the current element
        if (freq < minFreq) {
            minFreq = freq;
            maxValue = num;
        }
 
        // If freq is equal to the minFreq
        // and current element > maxValue
        // then update maxValue to the
        // current element
        else if (freq == minFreq
                 && maxValue < num) {
            maxValue = num;
        }
    }
 
    // Return the resultant maximum value
    return maxValue;
}
 
// Driver Code
public static void Main()
{
    int []arr = { 2, 2, 5, 50, 1 };
    int N = arr.Length;
    Console.Write(maxElementWithMinFreq(arr, N));
}
}
 
// This code is contributed by SURENDRA_GANGWAR.

Javascript

<script>
        // JavaScript Program to implement
        // the above approach
 
        // Function to find the maximum element
        // with the minimum frequency
        function maxElementWithMinFreq(arr, N) {
            // Stores the frequency of array
            // elements
            let mp = new Map();
 
            // Find the frequency and store
            // in the map
            for (let i = 0; i < N; i++) {
                if (mp.has(arr[i])) {
                    mp.set(arr[i], mp.get(arr[i]) + 1);
                }
                else {
                    mp.set(arr[i], 1);
                }
 
            }
 
            // Initialize minFreq to the maximum
            // value and minValue to the minimum
            let minFreq = Number.MAX_VALUE
            let maxValue = Number.MIN_VALUE;
 
            // Traverse the map mp
            for (let [key, value] of mp) {
 
                let num = key;
                let freq = value;
 
                // If freq < minFreq, then update
                // minFreq to freq and maxValue
                // to the current element
                if (freq < minFreq) {
                    minFreq = freq;
                    maxValue = num;
                }
 
                // If freq is equal to the minFreq
                // and current element > maxValue
                // then update maxValue to the
                // current element
                else if (freq == minFreq
                    && maxValue < num) {
                    maxValue = num;
                }
            }
 
            // Return the resultant maximum value
            return maxValue;
        }
 
        // Driver Code
 
        let arr = [2, 2, 5, 50, 1];
        let N = arr.length;
        document.write(maxElementWithMinFreq(arr, N));
 
// This code is contributed by Potta Lokesh
    </script>
Producción: 

50

 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por ayan10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *