理解大根堆—简单明了的一个例子
求最小的k个数,遍历一遍数组,把每个数都塞进大根堆heap中,如果heap的数量大于k,则弹出最大的一个,这样保证heap中只有k个数,因为每个数都要进去过一遍,这样heap最终剩余的肯定是最小的k个数了,而且还是从大到小的顺序排好的。
C++ 代码
class Solution {
public:
vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
priority_queue<int> heap;
while(!input.empty()){
heap.push(input.back()),input.pop_back();
if(heap.size()>k) heap.pop();
}
vector<int> res;
while(!heap.empty()){
res.push_back(heap.top());
heap.pop();
}
reverse(res.begin(),res.end());
return res;
}
};