网易内推笔试编程题2

这是一道关于序列操作的编程题目,操作是将一个初始为空的序列b上按照特定规则进行元素添加。题目分析表明,当n为奇数时,剩余元素从0开始输出,偶数时从1开始。给定例子展示了这一规律。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作序列:

小易有一个长度为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<length;i++){  
                a[i] = in.nextInt();  
            }  
            for(int i=length-1;i>=0;i-=2){  
                System.out.print(a[i]+" ");  
            }  
            int start = 0;  
            if(length%2==1)  
                start = 1;  
            for(int i=start;i<length-2;i+=2){  
                System.out.print(a[i]+" ");  
            }  
            System.out.print(a[length-2]);  
        }   
    }   
}  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值