因为题目要求第k
大元素,我们就建一个小根堆,堆里面最多只存放k
个元素。根据小根堆的定义,堆顶是最小的元素,堆底部最后一个是最大的元素,所以当堆大小为k
时,堆顶元素就是整个堆中第k
大元素(同时也是当前堆中最小元素)。
class KthLargest {
private:
priority_queue<int, vector<int>, greater<int>> q; //建立小根堆
int k;
public:
KthLargest(int k, vector<int>& nums) {
this->k = k;
for (int& num : nums) add(num);
}
int add(int val) {
q.push(val);
if (q.size() > k) q.pop(); //堆元素个数大于k,就弹出
return q.top(); //返回堆顶最小元素,即第k大元素
}
};