[algs] TopK问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sai_j/article/details/82725447
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();
    }
}

猜你喜欢

转载自blog.csdn.net/sai_j/article/details/82725447
今日推荐