解法: 建立小根堆, 每次存入最小的元素, 当堆内元素大于 k 时候,弹出堆顶最小的元素
遍历完整个数组后,堆内的 k个元素就是最大的K个元素
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> res;
unordered_map<int,int>_map;
priority_queue<pair<int,int>,vector<pair<int,int>>, greater<pair<int,int>> > pq;
for (auto i: nums) _map[i]++;
for(auto x: _map) {
int num = x.first,freq = x.second;
pq.push({
freq,num});
if (pq.size() == k+1) pq.pop();
}
while (pq.size() ) {
res.push_back(pq.top().second);pq.pop();
}
return res;
}
};