class SolutionTopK
{
public:
<span style="color:#ff0000;"> static </span> bool inc(int x,int y)
{
return x>y;
}
vector<int> topK(vector<int>&a,int k)
{
vector<int>v(a.begin(),a.begin()+k);
for(auto e:v)
cout<<e<<endl;
make_heap(v.begin(),v.end(),<span style="color:#ff6666;">inc</span>);
for(auto e:v)
cout<<e<<endl;
for(int i=k;i<a.size();++i){
if(a[i]>v[0]){
pop_heap(v.begin(),v.end(),<span style="color:#ff0000;">inc)</span>;
v.pop_back();
v.push_back(a[i]);
push_heap(v.begin(),v.end(),<span style="color:#ff6600;">inc</span>);
}
}
return v;
}
};
make_heap topk 问题
最新推荐文章于 2024-03-23 22:25:32 发布
本文介绍了一种使用堆数据结构来实现寻找数组中Top-K最大元素的算法。该方法首先建立一个包含前K个元素的小顶堆,然后遍历剩余元素,通过比较并更新堆中的最小元素来确保堆始终包含最大的K个元素。
977

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



