#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>
using namespace std;
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> freq;
for (int num : nums) {
freq[num]++;
}
// Min-heap to keep top k frequent elements
auto cmp = [](const pair<int,int>& a, const pair<int,int>& b) { return a.second > b.second; };
priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)> minHeap(cmp);
for (auto& [num, count] : freq) {
minHeap.push({num, count});
if (minHeap.size() > k) {
minHeap.pop();
}
}
vector<int> result;
while (!minHeap.empty()) {
result.push_back(minHeap.top().first);
minHeap.pop();
}
return result;
}
int main() {
vector<int> nums = {1,1,1,2,2,3};
int k = 2;
vector<int> topK = topKFrequent(nums, k);
for (int num : topK) {
cout << num << " ";
}
cout << endl;
return 0;
}for (int num : nums) { freq[num]++; }
Count frequency of each number in the input list
auto cmp = [](pair<int,int>& a, pair<int,int>& b) { return a.second > b.second; };
Define comparison to create min-heap based on frequency
for (auto& [num, count] : freq) { minHeap.push({num, count}); if (minHeap.size() > k) { minHeap.pop(); } }
Add each number-frequency pair to min-heap and remove least frequent if heap size exceeds k
while (!minHeap.empty()) { result.push_back(minHeap.top().first); minHeap.pop(); }
Extract top k frequent elements from heap into result