剑指offer——42最小的K个数

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
 
题解:
  原以为书中会有好方法,想不到还是排序和STL这两种方法。
  
 1 class Solution {
 2 public:
 3     vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
 4         if (input.size() < k)return {};
 5         set<int>res;
 6         for (auto a : input)
 7         {
 8             if (res.size() < k)
 9                 res.insert(a);
10             else if(a<*(--res.end()))
11             {
12                 res.erase(--res.end());
13                 res.insert(a);
14             }
15         }
16         vector<int>v;
17         v.assign(res.begin(), res.end());
18         return v;
19     }
20 };

 

posted @ 2019-10-16 23:03  自由之翼Az  阅读(170)  评论(0编辑  收藏  举报