设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。
你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第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
说明:
你可以假设 nums 的长度≥ k-1 且k ≥ 1。
解题思路:
想到了STL里的 priority_queue<Type, Container, Functional>
Type为数据类型,Container为存储容器,默认为vector,Function为元素比较方法,默认为operator<,也就是优先队列为大顶堆,即队头元素最大。
代码:
class KthLargest {
private:
priority_queue<int, vector<int>, greater<int> > myqueue; //小顶堆
int k;
public:
KthLargest(int k, vector<int> nums) {
this->k = k;
for(int i=0; i<nums.size(); i++)
{
myqueue.push(nums[i]);
if(i>k-1)
myqueue.pop();
}
}
int add(int val) {
myqueue.push(val);
if(myqueue.size() > k)
myqueue.pop();
return myqueue.top();
}
};









网友评论