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