剑指 Offer II 059. 数据流的第 K 大数值
class KthLargest {
public:
priority_queue<int, vector<int>, greater<int>> q;//小顶堆,只维护k个最大的元素
//则堆顶就是第k大的元素
int k;
KthLargest(int k, vector<int>& nums) {
this->k = k;
for (auto& x: nums) {
add(x);
}
}
int add(int val) {
q.push(val);
if (q.size() > k) {
q.pop();
}
return q.top();
}
};
剑指 Offer II 060. 出现频率最高的 k 个数字
上一题的升级版本,注意这里的cmp使用仿函数的方法
class Solution {
struct cmp {
bool operator()(pair<int,int> a, pair<int, int> b){
return a.second > b.second;
}
};
unordered_map<int, int> hash;
priority_queue<pair<int, int>, vector<pair<int,int>> , cmp> q;
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
for(auto num : nums) {
hash[num]++;
}
for(auto [key, value] : hash) {
q.emplace(key, value);
if(q.size() > k) {
q.pop();
}
}
vector<int> ret;
while(!q.empty()) {
ret.push_back(q.top().first);
q.pop();
}
return ret;
}
};