题目描述
设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。
参考代码
常规题,类似《剑指offer》第40题。注意求排序后的第K大元素,需要用小根堆。
class KthLargest {
public:
KthLargest(int k, vector<int>& nums) {
this->k = k;
for(auto num: nums){
if(pq.size() < k){
pq.push(num);
}else{
if(num > pq.top()){
pq.pop();
pq.push(num);
}
}
}
}
int add(int val) {
if(pq.size() < k){
pq.push(val);
}else{
if(val > pq.top()){
pq.pop();
pq.push(val);
}
}
return pq.top();
}
private:
priority_queue<int, vector<int>, greater<int> > pq; // 注意是第K大,不是第K小!
int k;
};
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest* obj = new KthLargest(k, nums);
* int param_1 = obj->add(val);
*/
大佬实现
class KthLargest {
int K;
priority_queue<int, vector<int>, greater<int>> pq;
public:
KthLargest(int k, vector<int>& nums) {
for (int n : nums) {
pq.push(n);
if (pq.size() > k) pq.pop();
}
K = k;
}
int add(int val) {
pq.push(val);
if (pq.size() > K) pq.pop();
return pq.top();
}
};
本文介绍了一个用于寻找数据流中第K大元素的类实现,通过使用小根堆来保持最近的K个最大元素,从而在O(logK)的时间复杂度内找到第K大元素。该方法适用于在线数据处理和实时数据分析场景。
597

被折叠的 条评论
为什么被折叠?



