查找最小的k个元素

来源:互联网 发布:linux io 优先级 编辑:程序博客网 时间:2024/06/10 16:56
题目:输入n个整数,输出其中最小的k个。 
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。 
分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。STL中的set和multiset为我们做了很好的堆的现,我们可以拿过来用。 multiset是<set>库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数。程序代码如下:
#include <set>#include <vector>#include <iostream>using namespace std;int main(void){//定义multiset数组,该数组是有序数组,从小到大排列multiset<int> data;//定义输入变量int input;//定义输出数组个数int k;//给定输出数组长度cout<<"please enter the number of k:"<<endl;cin>>k;cout<<"please enter the integer:"<<endl;//逐位将输入的数据存储到数组,并由小到大排序while(cin>>input){data.insert(input);}cout<<"the min k number is:"<<endl;//一次输出k个最小值for(int i=0;i<k;i++){ printf("%ld ",*data.begin()); data.erase(data.begin());}return 0;} 


0 0