剑指offer 029、最小的K个数
题目
题解
第一种方法不满足题意,时间复杂度为O(n),看第二种方法
解法1
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if (k <= 0 || k > input.size()) return vector<int>();
vector<int> result;
sort(input.begin(), input.end());
for (int i = 0; i < k; ++i) {
result.push_back(input[i]);
}
return result;
}
};
解法2
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if (k <= 0 || k > input.size()) return vector<int>();
vector<int> result;
// 借助优先队列(最小堆)
priority_queue<int, vector<int>, greater<int>> q;
for (auto x : input) {
q.push(x);
}
while (k--) {
result.push_back(q.top());
q.pop();
}
return result;
}
};