题目:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210211113700412.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjcyMTQxMg==,size_16,color_FFFFFF,t_70)
官方代码:最讨厌多个函数的题目:
class KthLargest {
public:
priority_queue<int, vector<int>, greater<int>> q;
int k;
KthLargest(int k, vector<int>& nums) {
this->k = k;
for (auto& x: nums) {
add(x);
}
}
int add(int val) {
q.push(val);
if (q.size() > k) {
q.pop();
}
return q.top();
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/solution/shu-ju-liu-zhong-de-di-k-da-yuan-su-by-l-woz8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分析:
將问题转化一下:给定一个数组找第k大的元素。
当然一下子就想到了优先队列。
但是,我之前都是全部加入,然后pop前k个。
此次官方给出的代码:第k大,但是使用的优先队列是从头到尾递增的,然后保证优先队列的大小为k,最后直接pop第一个元素就是解了。
值的参考一下吧!