使用优先队列的O(Nlogk)解法
class Solution {
public:
/**
* @param nums: an integer array
* @param k: An integer
* @return: the top k largest numbers in array
*/
class minOper
{
public:
bool operator() (const int &a ,const int &b)
{
return a > b;
}
};
vector<int> topk(vector<int> &nums, int k)
{
int n = nums.size();
int i,j;
vector<int> answer;
priority_queue<int,vector<int>,minOper> minHeap;
for(i=0;i<k;i++)
{
minHeap.push(nums[i]);
}
for(i=k;i<n;i++)
{
if(nums[i]<=minHeap.top()){
continue;
}
else
{
minHeap.pop();
minHeap.push(nums[i]);
}
}
while(!minHeap.empty())
{
answer.push_back(minHeap.top());
minHeap.pop();
}
reverse(answer.begin(), answer.end());
return answer;
// write your code here
}
};