题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
求解思路
在数据上建堆,这样的复杂度是
O
(
k
log
N
)
O(k\log N)
O(klogN)。有两个坑:第一个时如果k超过input的容量,返回空;第二个是注意使用比较函数,make_heap
和pop_heap
都要用到。
AC代码
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int>res;
if(input.empty() || k > input.size()) { // 注意超过范围应该是空的边界条件
return res;
}
make_heap(input.begin(), input.end(), greater<int>());
for(int i = 0; i < k; ++i) {
res.push_back(input.front());
pop_heap(input.begin(), input.end(), greater<int>());
input.pop_back();
}
return res;
}
};