Lintcode 544. 前K大数
小顶堆class Solution {
public:/**
* @param nums: an integer array
* @param k: An integer
* @return: the top k largest numbers in array
*/
vector<int> topk(vector<int> &nums, int k) {
// write your code here
vector<int> A;
for(int i=0;i<k;i++)
{
A.push_back(nums[i]);
}
make_heap(A.begin(),A.end(),greater<int>());
for(int i=k;i<nums.size();i++)
{
pop_heap(A.begin(),A.end(),greater<int>());
if(nums[i]>A[k-1])
{
A.pop_back();
A.push_back(nums[i]);
push_heap(A.begin(),A.end(),greater<int>());
}
}
sort_heap(A.begin(),A.end(),greater<int>());
return A;
}
};