544. 前K大数优先队列

2018-09-04 11:21:12 浏览数 (1)

在一个数组中找到前K大的数

样例

给出 [3,10,1000,-99,4,100], k = 3.

返回 [1000, 100, 10]

优先队列

一种容易想到的是冒泡排序,每次冒泡都会冒出一个最大值,显然是可以的,写起来比较简单就不写了,另外一种可以使用优先队列即大顶堆,上次在合并数字的题目中也用到了,那次用的是小的在顶,无非是把类型改一下,可以再看一下:priority_queue.

用优先队列的话,只需要把数据全部放入队列之中(这是一种二分插入),然后取出前k个(取出top,然后pop掉top)就可以了:

代码语言:javascript复制
  */
    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
    }

0 人点赞