【题目大意】求数据流中的第K大元素
int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3); // returns 4
kthLargest.add(5); // returns 5
kthLargest.add(10); // returns 5
kthLargest.add(9); // returns 8
kthLargest.add(4); // returns 8
这题我们采用优先队列priority_queue,让其内部的堆按照从大到小的顺序进行安排,并且保持队列的大小为K,
行安排,这样top就一定是第k大的数字了。
对于堆不是很了解的,找了个简单易懂的讲解,有需要的请参考。
基本数据结构――堆的基本概念及其操作
class KthLargest {
private:
priority_queue <int, vector<int>,greater<int>>qu;
int size;
public:
KthLargest(int k, vector<int> nums) {
size = k;
for(auto num:nums)
{
qu.push(num);
if(qu.size() > size)
qu.pop();
}
}
int add(int val) {
qu.push(val);
if(qu.size() > size)
qu.pop();
return qu.top();
}
};