544. 前K大数

在一个数组中找到前K大的数
样例
给出 [3,10,1000,-99,4,100], k = 3.
返回 [1000, 100, 10]

优先队列

一种容易想到的是冒泡排序,每次冒泡都会冒出一个最大值,显然是可以的,写起来比较简单就不写了,另外一种可以使用优先队列即大顶堆,上次在合并数字的题目中也用到了,那次用的是小的在顶,无非是把类型改一下,可以再看一下:priority_queue.
用优先队列的话,只需要把数据全部放入队列之中(这是一种二分插入),然后取出前k个(取出top,然后pop掉top)就可以了:

  */
    vector<int> topk(vector<int> &nums, int k) {
        priority_queue<int> q_res;
        vector<int> res;
        for(auto n:nums)
        {
            q_res.push(n);
        }
        while(k--)
        {
            res.push_back(q_res.top());
            q_res.pop();
        }
        return res;
        // write your code here
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。