本題的解題過程如下,首先要明確題目的意思:本題目要求給定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);
*/