2017 校招真题(数组)

来源:互联网 发布:怎么与isp网络签署协议 编辑:程序博客网 时间:2024/06/06 05:03

找出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
使用优先级队列 nlogk

#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;}


原创粉丝点击