剑指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)