采用优先队列和最小堆的方法。
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> freqMap;
for(int num : nums) {
freqMap[num]++;// 无需初始化,有则++;无则插入并初始化为0再++;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> minHeap;// 元素类型;底层存储容器类型;比较规则
for(const auto& [num, freq] : freqMap){
minHeap.emplace(freq, num);// 默认根据第一个元素排序
if(minHeap.size() > k) {
minHeap.pop();
}
}
vector<int> result;
while(!minHeap.empty()){
result.push_back(minHeap.top().second);
minHeap.pop();
}
return result;
}
};