剑指 Offer II 060. 出现频率最高的 k 个数字 力扣
class Solution {
public:
struct cmp {
bool operator() (const pair<int, int>& lhs, const pair<int, int>& rhs) {
return lhs.second > rhs.second; // 最小堆,从小到大排序
}
};
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp > q;
unordered_map<int, int> mymap;
vector<int> topKFrequent(vector<int>& nums, int k) {
int size = nums.size();
for (int i = 0; i < size; ++i) {
mymap[nums[i]]++;
}
unordered_map<int, int>::iterator iter = mymap.begin();
for (; iter != mymap.end(); ++iter) {
cout << iter -> first << iter -> second << endl;;
if (q.size() < k) {
q.push({iter -> first, iter -> second});
} else {
if (iter -> second > q.top().second ) {
q.pop();
q.push({iter -> first, iter -> second});
}
}
}
vector<int> res;
while(!q.empty()) {
res.push_back(q.top().first);
q.pop();
}
return res;
}
};