Максимальная частота числа с использованием хэш-карт. Альтернативный подход - PullRequest
0 голосов
/ 13 апреля 2020
 public static int maxFrequencyNumber(int[] arr){

        HashMap<Integer,Integer> m = new HashMap<>();


     for(int i=0;i<arr.length;i++){
        if(m.containsKey(arr[i]))
            m.put(arr[i],m.get(arr[i])+1);
         else
             m.put(arr[i],1);

     }
       ArrayList<Integer> p = new ArrayList<>();

     Set<Integer> s = m.keySet();   
        for(Integer i:s)
           p.add(m.get(i));

           Collections.sort(p);


         for(Integer i:s){
             if(m.get(i)==p.get(p.size()-1))
                 return i;


         }
        return 0;

    }

Вам дан массив целых чисел, которые содержат числа в случайном порядке. Напишите программу для поиска и возврата числа, которое встречается максимальное количество раз в заданном входном сигнале.

Если два или более элемента конкурируют за максимальную частоту, сначала верните элемент, который встречается в массиве.

Я получаю правильный вывод, за исключением одного случая, когда все элементы в массиве имеют одинаковую частоту. Что не так?

1 Ответ

0 голосов
/ 13 апреля 2020

Ваша проблема в том, что HashMap не записывает порядок, в котором вставляются его записи. Поэтому при частоте "t ie" ваш код может вернуть любой из соответствующих ключей.

Если вы измените HashMap на LinkedHashMap в своем коде, вы гарантируете, что записи будет повторяться в том же порядке, в котором они были изначально вставлены. Это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...