算法 海量数据中第K大的数

针对大量数据,并且数据还在不断增长的情况,返回第K大的数(如排行榜维护)

思路,采取最小堆,初始化堆放入K个元素,之后每来一个数,

若数比堆顶元素大,则删除堆顶元素,并替换新的数

否则,不做操作

#include 
#include
using namespace std;
int main()
{
	priority_queue, greater >myqueue;//小顶堆
	int n, k;
	cin >> n >> k;
	int a;
	for (int i = 0; i < n; i++)
	{
		cin >> a;
		if (myqueue.size() < k)
		{
			myqueue.push(a);
		}
		else 
		{
			if (a > myqueue.top()) //若新来的数比堆顶大,那么交换
			{
				myqueue.pop();
				myqueue.push(a);
			}

		}

	}


	//结束后,堆顶即为第K大的数
	cout << myqueue.top() << endl;
}

 

你可能感兴趣的:(算法)