网易内推笔试编程题2

操作序列:

小易有一个长度为n的整数序列,a_1,...,a_n。然后考虑在一个空序列b上进行n次以下操作:

1、将a_i放入b序列的末尾
2、逆置b序列

小易需要你计算输出操作n次之后的b序列。

输入:4

   1 2 3 4

输出:4 2 1 3

自己的解法:

package wangyizaixian;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];
		ArrayList myList = new ArrayList();
		//保存到b中
		int arrb[]=new int[n];
		while (sc.hasNext()) {
			//获取所有的输入
			for (int i = 0; i < n; i++) {
				arr[i] = sc.nextInt();
				myList.add(arr[i]); 
				Collections.reverse(myList);  
			}
		   
			for (int i = 0; i < myList.size(); i++) {
				System.out.print(myList.get(i));
				 if(i!= myList.size()-1) {
	                    System.out.print(" ");
	                }
			}
		}
		sc.close();
	}

}
结果:算法时间复杂度过大,超过规定时间;

其实,对于这种题,一般思路应该是:先找规律,进行分析后如何没有好的思路,在进行暴力求解,

 1 2 3 4 输出  4 2 1 3   从后向前隔一个输出,剩下的原序输出;

1 2 3     输出 3 1 2       从后向前隔一个输出,剩下的原序输出;

编程中考虑如果n为奇数,剩下的输出时从0开始输出,n为偶数情况,剩下的输出从1开始输出;至此,该题分析完毕。

参考别人的代码:

import java.util.*;   
public class Main{   
         
    public static void main(String[] args){   
        Scanner in = new Scanner(System.in);   
        while(in.hasNext()){   
            int length = in.nextInt();  
            in.nextLine();  
            int[] a = new int[length];  
            for(int i=0;i=0;i-=2){  
                System.out.print(a[i]+" ");  
            }  
            int start = 0;  
            if(length%2==1)  
                start = 1;  
            for(int i=start;i





你可能感兴趣的:(2017面试笔试)