题解 | #输入n个整数,输出其中最小的k个#TopK c++ 最大堆实现

输入n个整数,输出其中最小的k个

http://www.nowcoder.com/practice/69ef2267aafd4d52b250a272fd27052c

使用堆得自动排序功能,维护一个大小为k的最大堆。
最终输出k个数即为最小k个数。
如果是求最大k个数,那么就使用最小堆。

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int m, k;
    for (; cin >> m >> k;) {
        vector<int> nums;
        for (; m--;) {
            int x;
            cin >> x;
            nums.push_back(x);
        }

        priority_queue<int> mxheap;
        for (int i = 0; i < nums.size(); i++) {
            mxheap.push(nums[i]);
            for (; mxheap.size() > k; )
                mxheap.pop();
        }

        vector<int> res;
        for (; mxheap.size(); mxheap.pop()) 
            res.push_back(mxheap.top());

        for (int i = res.size() - 1; i >=0; i--) 
            cout << res[i] << ' ';
        cout << endl;
    }
    return 0;
}
全部评论

相关推荐

见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务