题解:
题解:
自己先是用的vector实现元素的add,导致超时了。然后参考了大佬的博客,我们可以使用优先队列建立大小为k的小根堆,第k大的元素始终排在堆顶,比k大的元素排在堆后。在初始化时,也要注意堆的大小维持在k(nums为空,record中的元素没有添加也为空,k大于nums.size(),只是将大小为nums.size()的元素范围添加到record中了)。在进行add操作时,也需要注意堆的大小。
代码如下:
class KthLargest {
private:
priority_queue<int,vector<int>,greater<int>> record;
int k;
public:
KthLargest(int k, vector<int>& nums) {
this->k=k;
for(auto num:nums)
{
record.push(num);
if(record.size()>k)record.pop();
}
}
int add(int val) {
record.push(val);
if(record.size()>k)record.pop();
return record.top();
}
};