int main() {
int N, K;
cin >> N >> K;
// 请注意,针对TopK(最大的K个元素)问题,我们采用的是末位淘汰的思想;
// 末位淘汰后,剩下来的自然而然就是最顶尖的选手;
// 因此,这里用的是MinPQ,小根堆;
// 时间复杂度: NlogM; 空间复杂度: O(M)
priority_queue<int, vector<int>, greater<int>> pq;
for (int i = 0; i < N; i++) {
int elem;
cin >> elem;
pq.push(elem);
if (pq.size() > K)
pq.pop();
}
stack<int> stk;
for (auto elem : pq)
stk.push(elem);
while (!stk.empty()) {
cout << stk.top() << endl;
stk.pop();
}
}
[algs] TopK问题
最新推荐文章于 2020-03-03 14:43:22 发布