题解 | #最小的K个数#
最小的K个数
https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf
class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res; //排除特殊情况 fast-template if(k == 0 || input.size() == 0) return res; priority_queue<int> q; //构建一个k个大小的堆 for(int i = 0; i < k; i++) q.push(input[i]); for(int i = k; i < input.size(); i++){ //较小元素入堆 if(q.top() > input[i]){ q.pop(); q.push(input[i]); } } //堆中元素取出入vector for(int i = 0; i < k; i++){ res.push_back(q.top()); q.pop(); } return res; } };
官方做法,了解了 堆 这里是优先队列(大顶堆) 基本操作算子 和 栈的算子的名字一样