描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
- 0 <= k <= input.length <= 10000
- 0 <= input[i] <= 10000
示例1
输入:
[4,5,1,6,2,7,3,8],4
返回值:
[1,2,3,4]
说明:
返回最小的4个数即可,返回[1,3,2,4]也可以
学习了堆排序
C++中 priority_queue默认为大顶堆,而不是数组,不能下标遍历。
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
priority_queue<int> q;
for (auto x:input) {
q.push(x);
if (q.size() > k) {
q.pop();
}
}
input.clear();
if (q.size() < k) return input;
while (!q.empty()) {
input.push_back(q.top());
q.pop();
}
return input;
}
};