剑指 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;}};
