剑指office--------最小的K个数 (待补充)

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
 
 
思路1:用排序算法   快排,堆排序等
 
思路2:借用STL中的multiset,因为其有自动排序功能+存在重复元素(set是自动排序+去重)    ps:因为打acm原因,更倾向于借用stl
 
 1 class Solution {
 2 public:
 3     vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
 4         vector<int>ans;
 5         if (k==0||k>input.size()) return ans;
 6         multiset<int>q;
 7         int len=input.size();
 8         for (int i=0;i<len;i++){
 9             q.insert(input[i]);
10             
11         }
12         
13         multiset<int>::iterator it=q.begin();
14         for (int i=0;i<k;i++){
15             ans.push_back(*it);
16             it++;
17         }
18         return ans;
19     }
20 };

时间复杂度:O(input.size()+k)+往multiset插入元素  O(input.size() * log(input.size()))

空间复杂度:O(input.size()+k)

原文地址:https://www.cnblogs.com/q1204675546/p/13381481.html