Максимальное число частот в массиве с использованием хэш-карт - PullRequest
0 голосов
/ 22 апреля 2020

Проблема:

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

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

Формат ввода:

Строка 1: целое число N, т.е. размер массива
Строка 2: N целых чисел, являющихся элементами массива, разделенных пробелами

Формат вывода:

Наиболее частый элемент

Ограничения:

0 <= N <= 10 ^ 8 </p>

Пример ввода 1:

13
2 12 2 11 12 2 1 2 2 11 12 2 6 

Пример Выход 1:

2

Вывод неверный, скажите, пожалуйста, что не так. Вот код:

#include <unordered_map>
using namespace std;


int highestFrequency(int *input, int n){
    unordered_map<int, int> map;
    int maxFreq = 0;
    for(int i = 0; i < n; i++){
        if(map.count(input[i]) > 0){
            map[input[i]]++;
            if(map[input[i]] > maxFreq){
                maxFreq = map[input[i]];
            }
        }
        map[input[i]] = 1;
    }
    for(int i = 0; i < n; i++){
        if(map[input[i]] == maxFreq){
            cout << input[i];
        }
    }

    /* Don't write main().
     * the input array is already passed as function argument.
     * Taking input and printing output is handled automatically.
     */ 
}

1 Ответ

1 голос
/ 22 апреля 2020

Я думаю, что это эффективный способ подсчета частоты элементов. unordered_map mp;

// Traverse through array elements and 
// count frequencies 
for (int i = 0; i < n; i++) 
    mp[arr[i]]++; 

// Traverse through map and print frequencies 
for (auto x : mp) 
    cout << x.first << " " << x.second << endl; 
// found the most frequent item.
 int max_count = 0, res = -1; 
for (auto i : mp) { 
    if (max_count < i.second) { 
        res = i.first; 
        max_count = i.second; 
    } 
} 

Res - это ответ

...