Je voudrais savoir comment min tas est utilisé ici pour résoudre le problème suivant.Comment min tas est utilisé ici pour résoudre ce problème
Ce que j'ai pensé pour le résoudre est d'utiliser la hashtable et enregistrer les comptes des nombres. mais je ne sais pas comment utiliser le tas min pour contiune résoudre le problème.
Étant donné un tableau d'entiers non vides, renvoyez les k éléments les plus fréquents.
Par exemple, Étant donné [1,1,1,2,2,3] et k = 2, retour [1,2].
Remarque: Vous pouvez supposer que k est toujours valide, 1 ≤ k ≤ nombre d'éléments uniques. La complexité temporelle de votre algorithme doit être meilleure que O (n log n), où n est la taille du tableau.
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> counts;
priority_queue<int, vector<int>, greater<int>> max_k;
for(auto i : nums) ++counts[i];
for(auto & i : counts) {
max_k.push(i.second);
// Size of the min heap is maintained at equal to or below k
while(max_k.size() > k) max_k.pop();
}
vector<int> res;
for(auto & i : counts) {
if(i.second >= max_k.top()) res.push_back(i.first);
}
return res;
}
Le code que vous avez affiché fonctionne-t-il? Si c'est le cas, c'est tout - 'std :: priority_queue' est un min-tas. – Quentin
@Quentin Je suis débutant en structures de données. Pouvez-vous expliquer comment le tas est utilisé pour obtenir les meilleurs éléments K? –
Pour moi votre question n'est pas claire. Vous demandez comment faire fonctionner le code ou demandez-vous comment le code fonctionne? – 4386427