Вы всегда можете попробовать метод грубой силы, подсчитать частоту каждого элемента, а затем найти максимальный.
Чтобы реализовать полную версию такой функции с эффективностью, вам понадобится специальная структура данных, такая как hashtable
или dictionary
.
Но следующие коды работают хорошо, если вам просто нужно вернуть первый элемент, соответствующий этому условию.
#include <stdio.h>
// returns the first matched most frequent item of a list
// list items of same value must be grouped, for example, a sorted list
// only returns the first matched item
int max_frequent_item_of(int vet[], int dim)
{
int i = 0;
// element and its count of current sublist
int current = vet[0];
int current_count = 0;
// most frequent element and its count of the list so far
int most = vet[0];
int most_count = 0;
while (i < dim) {
// if i-th element still belong to current sublist, run the counter
if (vet[i] == current) {
current_count += 1;
i += 1;
}
// otherwise, the current sublist just ended
else {
// update the most frequent element
if (current_count > most_count) {
most = current;
most_count = current_count;
}
// reset current sublist
current = vet[i];
current_count = 1;
i += 1;
}
}
printf("most frequent item %d, count %d\n", most, most_count);
return most;
}
int main(void)
{
// vet must be in order, sort with `qsort` if necessary
int vet[] = {1, 1, 2, 3, 4, 4, 4, 8, 9, 9};
int size = 10;
int n;
printf("list: ");
for (n = 0 ; n < size; n++)
{
printf("%d ", vet[n]);
}
printf("\n");
max_frequent_item_of(vet, size);
return 0;
}
выход
list: 1 1 2 3 4 4 4 8 9 9
most frequent item 4, count 3
может быть, вы можете посетить каждый элемент последовательно и каждый раз, когда вы посещаете какой-либо элемент вы добавляете его в другой вектор и убедитесь, что в следующий раз, когда вы проверяете номер, который вы хотите ли посетить уже не содержится в этом векторе перед добавлением результатов. хотя я не рекомендую это для векторов, которые имеют много элементов, поскольку они будут медленными. –
Я знаю, что случилось. Он не компилируется! –
Для 'C' это довольно сложная проблема, вам нужен либо хороший алгоритм (сначала отсортируйте массив, затем используйте метод caterpillar), либо хорошую структуру данных (хеш-таблицу или словарь, например' Python'). –