lintcode程序员

544. 前K大数

2018-03-01  本文已影响7人  和蔼的zhxing

在一个数组中找到前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
    }
上一篇 下一篇

猜你喜欢

热点阅读