题目
输入整数数组 arr
,找出其中最小的 k
个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
思路
最直接的肯定是sort+前k位输出(貌似这样在力扣上还省时一点)
研究了一下书上的方法,用一个STL容器完成,维持一个容量为k的堆,保证这个堆中的数据都是最小的。
代码
class Solution {
public:
vector<int> getLeastNumbers(vector<int>& arr, int k) {
multiset<int,greater<int>> minset;
for(int i = 0;i < arr.size();i++){
if(minset.size() < k){
minset.insert(arr[i]);
}else{
multiset<int,greater<int>>::iterator ite;
ite = minset.begin();
if(arr[i] < *ite){
minset.erase(ite);
minset.insert(arr[i]);
}
}
}
vector<int> vec;
vec.assign(minset.begin(), minset.end());
return vec;
}
};