1 找出n个数里最小的k个
输入描述:
每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n 不超过100。
输出描述:
输出n个整数里最小的k个数。升序输出
示例1
输入
3 9 6 8 -10 7 -11 19 30 12 23 5
输出
-11 -10 3 6 7
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main()
{
//使用优先级队列维护一个大顶锥
vector<int> input;
int temp;
while(cin>>temp)
{
input.push_back(temp);
}
int n=input.size();
int k=input[n-1];
if(k>n-1)
{
cout<<0<<endl;
return 0;
}
priority_queue<int> que;
for(int i=0;i<n-1;i++)
{
if(i<k)
que.push(input[i]);
else{
if(que.top()>input[i])
{
que.pop();
que.push(input[i]);
}
}
}
int m=que.size();
vector<int> res(m,0);
int i=m-1;
while(!que.empty())
{
res[i--]=que.top();
que.pop();
}
for(int i=0;i<m;i++)
{
cout<<res[i];
if(i<m-1) cout<<' ';
}
cout<<endl;
return 0;
}