class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int size = input.size();
vector<int> ret;
if (size == 0 || k <= 0 || k > size)
return ret;
priority_queue<int> q;
for (int i = 0; i < size; i++) {
if (q.size() < k)
q.push(input[i]);
else {
if (input[i] < q.top()) {
q.pop();
q.push(input[i]);
}
}
}
while (!q.empty()) {
ret.push_back(q.top());
q.pop();
}
reverse(ret.begin(), ret.end());
return ret;
}
};
class Solution{
public:
vector<int> GetLeastNumbers(vector<int> input, int k){
if(input.size() < k || k < 0)
return vector<int>();
multiset<int, greater<int>> leastNumbers;
vector<int> ::const_iterator iter = input.begin();
for(; iter != input.end(); iter++){
if(leastNumbers.size() < k)
leastNumbers.insert(*iter);
else{
multiset<int, greater<int>>::iterator iterGreatest = leastNumbers.begin();
if(*iter < * iterGreatest){
leastNumbers.erase(*iterGreatest);
leastNumbers.insert(*iter);
}
}
}
return vector<int>(leastNumbers.begin(), leastNumbers.end());
}
};