《校园招聘网易》之操作序列

来源:互联网 发布:手持数据采集器多少钱 编辑:程序博客网 时间:2024/05/22 13:14

小易有一个长度为n的整数序列,a_1,...,a_n。然后考虑在一个空序列b上进行n次以下操作:
1、将a_i放入b序列的末尾
2、逆置b序列
小易需要你计算输出操作n次之后的b序列。 

输入描述:
输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。第二行包括n个整数a_i(1 ≤ a_i ≤ 10^9),即序列a中的每个整数,以空格分割。


输出描述:
在一行中输出操作n次之后的b序列,以空格分割,行末无空格。

输入例子1:
41 2 3 4

输出例子1:
4 2 1 3

下午参加了网易的笔试,没通过所有的测试用例,提示说是时间超过限制,算法复杂度过大导致在运行时间内未完成程序运行,当时提交的第一版程序是这样的

#include <iostream>#include <stdio.h>#define N 200000using namespace std;int main(){    int a[N];    int b[N];    int temp,n;    cin>>n;    for(int i=0;i<n;i++)    {        cin>>a[i];    }    for(int i=0;i<n;i++)    {        b[i]=a[i];        for(int j=0;j<(i/2);j++)        {            temp = b[i-j];            b[i-j]=b[j];            b[j] = temp;        }    }    for(int i=0;i<n-1;i++)    {        cout<<b[i]<<' ';        //if(i==n-1)        //cout<<b[i];    }    cout<<b[n-1];    return 0;}
运行的结果如下所示
                                                            

       下午那会还是因为时间复杂度过大报错,刚才在牛客网的平台上提交是通过率是20%,可以看看,这个解答的问题在哪,我只是把元素互换位置了,这样出现的问题就是一部分的测试用例不是这样升序排列的。

       提交了第二版的程序:

       

#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;int main(){    int Num;    while(cin>>Num)    {                int Input;        vector<int> Output_result;        while(Num--)        {            cin>>Input;            Output_result.push_back(Input);            std::reverse(Output_result.begin(),Output_result.end());        }        for(int i=0;i<Output_result.size()-1;++i)        {                         cout<<Output_result[i]<<" ";                                    }      // cout<<Output_result[Num-1];        cout<<Output_result[Num-1];//cout<<endl;    }}

       第二版程序情况怎么跟第一版一样,当时考试的时候是显示通过50%,然后时间复杂度过大,现在又报错,

                                                 

         不知道什么原因导致了这个,下午思考了一下,发现其实其中有规律的,输出的下标是一个等差数列,按照这个规律去编写就可以,第三版本程序如下:

#include<iostream>using namespace std;int main(){int N;while (cin >> N){int a[N];int b[N];int i, j;for (i = 0; i < N; i++){cin >> a[i];}for (i = N - 1, j = 0; i >= 0; j++){b[j] = a[i];i = i - 2;}for (i = N % j; i < N; j++){b[j] = a[i];i = i + 2;}for (i = 0; i < N; i++){cout << b[i] << ' ';}cout <<b[N-1] <<endl;}return 0;}
           结果如下: