如何从前个数据中找到前K个大/小的数据并打印?
程序员文章站
2024-03-15 19:08:00
...
要解决这个问题,那么我们可以从前十个数据入手,先拿到前十个数据,接下来我们以求前2000个数据中前十个小的数据为例:
取出前十个数据,我们把它放入小跟堆里;从十一个数据vec[i]开始,我们与第一小minHeap.top()数据作比较。如果vec[i] < minHeap.top(),则将vec[i] 的值赋给minHeap.top();遍历完所有数据之后,则我们的小根堆里就是我们要的数据。
上代码:(2000个数据中找到前10 小的)
#include<iostream>
#include<vector>
#include<functional>
#include<queue>
using namespace std;
typedef unsigned int uint
const int N = 2000;
int K = 10;
int main()
{
vector<uint> vec ;
for(int i = 0;i< 2000;i++)
{
vec.push_back(rand()+i);
}
priority_queue <uint,vector<uint>,greater<uint>> minHeap; //申请一个小根堆
for(int i = 0; i< K;++i) //将前十个数放到小根堆里面。
{
minHeap.push(vec[i]);
}
for(int i = K;i< N ;++i)
{
if(vec[i] < minHeap.top())
{
minHeap.pop();
minHeap.push(vec[i]);
}
}
for(int i = 0;i< K;++i)
{
cout<<minHeap.top()<<" ";
minHeap.pop();
}
cout<<endl;
return 0;
}
上一篇: C++小案例-利用数组计算n(防止溢出)
下一篇: 判断一个数是否为素数