剑指offer 最小的K个数

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
 
 
 
思路一:直接排序,时间复杂度O(nlogn)
思路二:建立最大堆。
 1 class Solution {
 2 public:
 3     vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
 4         vector<int> res;
 5         int len = input.size();
 6         if (k <= 0 || k > len) //k不符合条件的话,均返回空
 7             return res;
 8         priority_queue<int,vector<int> > pq;
 9         for (int i = 0; i < len; i++) {
10             if (pq.size() < k) {
11                 pq.push(input[i]);
12             } else {
13                 int temp = pq.top();
14                 if (input[i] < temp) {
15                     pq.pop();
16                     pq.push(input[i]);
17                 }
18             }
19         }
20         while (!pq.empty()) {
21             int top = pq.top();
22             pq.pop();
23             res.push_back(top);
24         }
25         //sort(res.begin(), res.end());
26         return res;
27     }
28 };

 

思路三:快排思想
posted @ 2019-08-21 07:56  琴影  阅读(144)  评论(0编辑  收藏  举报