题目
输入n个整数,找出其中最小的k个数。
注意:
数据保证k一定小于等于输入数组的长度;
输出数组内元素请按从小到大顺序排序;
样例
输入:[1,2,3,4,5,6,7,8] , k=4
输出:[1,2,3,4]

解法:优先队列

维护大小为k的优先队列,然后存入vector中倒序
时间复杂度O(nlogk),空间复杂度O(k)

  1. class Solution {
  2. public:
  3. priority_queue<int> q;
  4. vector<int> getLeastNumbers_Solution(vector<int> input, int k) {
  5. for (auto x: input) {
  6. if (q.size() >= k) {
  7. if (x < q.top()) {
  8. q.pop();
  9. q.push(x);
  10. }
  11. }
  12. else q.push(x);
  13. }
  14. vector<int> ans;
  15. while (q.size()) {
  16. ans.push_back(q.top());
  17. q.pop();
  18. }
  19. reverse(ans.begin(), ans.end());
  20. return ans;
  21. }
  22. };