2 votes

Comment imprimer tous les éléments qui sont les plus fréquents dans un tableau ?

J'ai besoin d'imprimer les nombres qui sont les éléments les plus fréquents dans un tableau. Disons que j'ai un int comme ça :

int[] array = {1, 2, 3, 3, 3, 5}

Je devrai ensuite imprimer 3, car c'est l'élément le plus fréquent. Mais j'ai aussi besoin d'imprimer les éléments qui apparaissent comme fréquents. Disons que j'ai ce tableau maintenant :

int[] array = {1, 2, 3, 3, 3, 5, 5, 5, 6, 7, 7, 7}

Je dois ensuite imprimer (dans l'ordre) 3, 5 et 7, car ces trois éléments sont les plus fréquents ensemble. La sortie doit donc ressembler à ceci :

3
5
7

Voici le code dont je dispose pour l'instant (il fonctionne pour l'impression d'un seul des numéros les plus fréquents)

   Arrays.sort(diceSumArray);

    int maxCount = 1;
    int index = 1;

    int r = diceSumArray[0];

    for (int i = 1; i < diceSumArray.length; i++) {
        if (diceSumArray[i] == diceSumArray[i-1]) {
            index++;
        } else {
            if (index > maxCount) {
                maxCount = index;
                r = diceSumArray[i-1];
            }
            index = 1;
        }
    }

    // not sure where to put the print or if the code below is necessary 
    System.out.println(r);

    if (index > maxCount) {
        maxCount = index;
        r = diceSumArray[diceSumArray.length -1];
    }

1voto

Majed Badawi Points 17281

Une meilleure façon de procéder serait d'utiliser HashMap pour atteindre un linear La complexité temporelle, où il faut itérer sur le tableau, enregistrer le nombre d'occurrences de chaque élément et renvoyer une liste de ceux qui se produisent le plus :

private static List<Integer> getMostFreq(int[] arr){
        List<Integer> list = new ArrayList<>();
        if(arr == null || arr.length == 0)
            return list;
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int num : arr)
            if(!map.containsKey(num))
                map.put(num,1);
            else
                map.replace(num, map.get(num)+1);
        int max = Integer.MIN_VALUE;
        for(HashMap.Entry<Integer,Integer> item : map.entrySet())
            if(item.getValue() > max)
                max = item.getValue();
        for(HashMap.Entry<Integer,Integer> item : map.entrySet())
            if(item.getValue() == max)
                list.add(item.getKey());
        return list;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X