最小的k个数:最直观的想法是,使用sort排序,然后遍历数组返回前k个数或者直接使用迭代器返回前k个数。

    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> res;
        if(input.size()==0)
            return res;
        sort(input.begin(),input.end());
        //不能越界且为k个数
        for(int i=0;i<k&&i<input.size();i++)
            res.push_back(input[i]);
        return res;
    }

    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> res;
        if(input.size()==0)
            return res;
        sort(input.begin(),input.end());
        return vector<int>(input.begin(),input.begin()+k);
    }

优化:使用STL中的优先级队列priority_queue来实现大根堆。维护一个大小为k的大根堆,遍历数组,如果大根堆的长度小于k则入堆,反之则判断当前元素是否比大根堆堆顶小,如果是则将堆顶元素出堆并且将当前元素入堆,最后剩余的k个元素的大根堆即为所求。同时完成大根堆后可以使用input存储。

vector<int> GetLeastNumbers_Solution(vector<int> input, int k) 
{
    vector<int> res;
    //数组为空或者k为空或者k大于数组长度则为空
    if(input.size()==0||k==0||k>input.size())
        return res;
    priority_queue<int> pri_que; //优先级队列 大根堆
    for(auto val:input)
    {
        if(pri_que.size()<k)
            pri_que.push(val);
        //维护一个大小为k的大根堆
        else
        {
            //pri_que.top()表示大根堆的最大值
            if(val<pri_que.top())
            {
                //pri_que.pop()弹出的是大根堆的最大值
                pri_que.pop(); 
                pri_que.push(val); //将当前这个较小的压入队列
            }
        }
     }
     while(!pri_que.empty())
     {
         res.push_back(pri_que.top());
         pri_que.pop();
     }
     return res;
}

vector<int> GetLeastNumbers_Solution(vector<int> input, int k) 
{
    vector<int> res;
    //数组为空或者k为空或者k大于数组长度则为空
    if(input.size()==0||k==0||k>input.size())
        return res;
    priority_queue<int> pri_que; //优先级队列 大根堆
    for(auto val:input)
    {
       if(pri_que.size()<k)
          pri_que.push(val);
       //维护一个大小为k的大根堆
       else
       {
           //pri_que.top()表示大根堆的最大值
           if(val<pri_que.top())
           {
               //pri_que.pop()弹出的是大根堆的最大值
               pri_que.pop(); 
               pri_que.push(val); //将当前这个较小的压入队列
           }
        }
     }
     //清空元素
     input.clear();
     while(!pri_que.empty())
     {
        input.push_back(pri_que.top());
        pri_que.pop();
     }
     return input;
}