https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/
思路:用
t
r
e
a
p
treap
treap之类的数据结构肯定可以搞定,不过这道题目只有插入操作,没有删除操作,且
k
k
k是固定的,那么直接用堆就可以了。维护一个元素个数恰好为
k
k
k的小根堆,那么堆顶元素就是第
k
k
k大元素。
class KthLargest {
public:
priority_queue<int,vector<int>,greater<int>> q;
int k;
KthLargest(int k, vector<int>& nums):k(k),q(move(priority_queue<int,vector<int>,greater<int>>(nums.begin(),nums.end()))) {
while(q.size()>k)
q.pop();
}
int add(int val) {
q.push(val);
if(q.size()>k)
q.pop();
return q.top();
}
};
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest* obj = new KthLargest(k, nums);
* int param_1 = obj->add(val);
*/