除夕也要打卡吖,首先解释一下题目,add就是往arr里面增加一个元素, k就是第k大的数, 比如[1,2,3] 第1大的数是3,第2大的数字是2,第3大的数字是1,这个题目用优先队列很简单,当然我是看了题解的,这个stl我没用过,还是因为自己太菜了,orz
//升序队列,小顶堆
priority_queue <int,vector<int>,greater<int> > q;
//降序队列,大顶堆
priority_queue <int,vector<int>,less<int> >q;
//greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)
class KthLargest {
public:
priority_queue<int, vector<int>, greater<int>> q;
int k;
KthLargest(int k, vector<int>& nums)
{
this->k = k;//将函数中的k与外界定义的k
for (auto& x: nums) //遍历vector中元素
{
add(x);
}
}
int add(int val) {
q.push(val);
if (q.size() > k)。。维护一个优先队列,并让优先队列中的元素一直在k,这样可以保证队列顶端元素就是我们想要的元素
{
q.pop();
}
return q.top();
}
};