本题的解题过程如下,首先要明确题目的意思:本题目要求给定vector在放入最小堆之后第K大的元素,我们可以在添加元素的时候(也就是add函数)检查队中的元素格式是否大于K,一旦发现大于K那么就将多余的数字弹出,当我们将目标值val加入堆中之后,仍然要维护堆的大小,其过程同上,最后将堆顶元素返回即可。
class KthLargest {
public:
priority_queue<int, vector<int>, greater<int> > q;//定义一个最小堆
int K;
KthLargest(int k, vector<int>& nums) {
//不断地push元素
K=k;
for(int i=0;i<nums.size();i++)
{
q.push(nums[i]);
if(q.size()>K)
{
q.pop();
}
}
}
int add(int val) {
while(q.size()>K)
{
q.pop();
}
q.push(val);
if(q.size()>K)
{
q.pop();
}
return q.top();
}
};
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest* obj = new KthLargest(k, nums);
* int param_1 = obj->add(val);
*/