阿鑫来了  

给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

  • 0 <= k <= input.length <= 10000
  • 0 <= input[i] <= 10000

方法一:直接排序

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int>ret;
        if(k==0||k>input.size()) return ret;
        sort(input.begin(),input.end());
        return vector<int>({input.begin(),input.begin()+k});
        }
};

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。

sort(start,end,cmp)

1.sort函数没有第三个参数,实现的是从小到大(升序)排列

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a[10]={9,6,3,8,5,2,7,4,1,0};
    sort(a,a+10);//指针
    for(int i=0;i<10;i++)
    cout<<a[i]<<endl;
    return 0;
}

2.需要在sort()函数里的第三个参数了,告诉程序我要从大到小排序

            需要加入一个比较函数compare(),此函数的实现过程如下

#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{   
return a>b;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
 sort(a,a+10,compare);//在这里就不需要对compare函数传入参数了   
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}

 

方法二:堆排序

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        
        vector<int>res;
        if(k==0||k>input.size())
            return res;
        
        priority_queue<int, vector<int>> pq;
        for(int i=0;i<k;++i){
            pq.push(input[i]);
        }
        
        for(int i=k;i<input.size();++i){
            if(input[i]<pq.top()){
                pq.pop();
                pq.push(input[i]);
            }
        }
        
        while (!pq.empty()) {
            res.push_back(pq.top());
            pq.pop();
        }

        return res;
        
        }
};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2021-09-12 16:45  阿鑫来了  阅读(123)  评论(0)    收藏  举报