https://leetcode.com/problems/top-k-frequent-elements/description/
hash map + heap
Time complicity: O(N + logk)
struct KvPair
{
int key = 0;
int val = 0;
};
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> counts;
for (int num : nums)
{
counts[num]++;
}
auto comp = [](const KvPair& lhs, const KvPair& rhs){
return lhs.val > rhs.val;
};
priority_queue<KvPair, vector<KvPair>, decltype(comp)> pri_q(comp);
for (auto& it : counts)
{
pri_q.push({it.first, it.second});
if (pri_q.size() > k)
pri_q.pop();
}
vector<int> results;
while (!pri_q.empty())
{
results.push_back(pri_q.top().key);
pri_q.pop();
}
return results;
}
};