Sie können immer die Brute-Force-Methode ausprobieren, die Häufigkeit jedes Elements zählen und dann die maximale ermitteln.
Um eine vollständige Version dieser Funktion mit Effizienz zu implementieren, benötigen Sie spezielle Datenstruktur wie hashtable
oder dictionary
.
Die folgenden Codes funktionieren jedoch gut, wenn Sie nur das erste Element zurückgeben müssen, das diese Bedingung erfüllt.
#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;
}
Ausgang
list: 1 1 2 3 4 4 4 8 9 9
most frequent item 4, count 3
vielleicht können Sie jedes Element nacheinander besuchen und, wenn Sie ein bestimmtes Element besuchen Sie es zu einem anderen Vektor hinzufügen, und stellen Sie sicher, das nächste Mal, dass Sie die Nummer prüfen, ob Sie besuchen möchten ist nicht bereits in diesem Vektor enthalten, bevor die Ergebnisse hinzugefügt werden. obwohl ich dies nicht für Vektoren, die viele Elemente haben, empfehlen, wie es langsam sein wird. –
Ich weiß was falsch ist. Es kompiliert nicht! –
Für 'C' ist es ein ziemlich kniffliges Problem, Sie brauchen entweder einen guten Algorithmus (zuerst das Array sortieren, dann eine Raupe-Methode verwenden) oder eine gute Datenstruktur (eine Hashtabelle oder ein Wörterbuch wie' Python'). –