Amazon10月10日网上笔试题2

题目简介:指定入栈顺序和出栈顺序,打印入栈出栈的次序

例子:入栈123,出栈213,则打印push1|push2|pop2|pop1|push3|pop3

具体代码如下:(当时写的代码,未优化)

import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;

public class Solution2 
{
	private String calculateOperationSequence(int[] originalArray, int[] resultArray) 
	{
		// your code is here
		Stack s = new Stack();
		String temp="";
		int temp_r = resultArray[0];
		int temp_r_index = 0;
		int count = 0;
		if(originalArray.length==resultArray.length){
			for(int i=0;i<originalArray.length;i++){
				s.push(originalArray[i]);
				temp = temp+"|"+"push"+String.valueOf(i+1);
				count++;
				while(true){
					if(s.empty()){
						break;
					}else{
						if(Integer.parseInt(s.peek().toString())==temp_r){
							temp = temp+"|"+"pop"+s.peek().toString();
							count++;
							if(temp_r_index==resultArray.length-1){
								
							}else{
								temp_r_index++;
								temp_r = resultArray[temp_r_index];
							}
							s.pop();
						}else{
							break;
						}
					}
				}
			}
			temp = temp.substring(1, temp.length());

			if(count==originalArray.length + resultArray.length){
				return temp;
			}else{
				return "None";
			}
		}else{
			return "None";
		}
		
	}
	
	public static void main(String[] args) 
	{
		Solution2 solution = new Solution2();
		Scanner scanner = new Scanner(System.in);
		
		while (scanner.hasNextLine()) 
		{
			String strLine1 = scanner.nextLine();
			StringTokenizer stringTokenizer1 = new StringTokenizer(strLine1);
			
			//Initialize the original array
			int arrayLength = stringTokenizer1.countTokens();
			int[] originalArray = new int[arrayLength];
			for(int i = 0; i < arrayLength; i++)
			{
				originalArray[i] = Integer.parseInt(stringTokenizer1.nextToken());
			}
			
			//Initialize the result array
			String strLine2 = scanner.nextLine();
			StringTokenizer stringTokenizer2 = new StringTokenizer(strLine2);
			arrayLength = stringTokenizer2.countTokens();
			int[] resultArray = new int[arrayLength];
			for(int j = 0; j < arrayLength; j++)
			{
				resultArray[j] = Integer.parseInt(stringTokenizer2.nextToken());
			}
			
			String operationSequence = solution.calculateOperationSequence(originalArray, resultArray);
			System.out.println(operationSequence);
		}
	}
}

总结:最开始用数组做的,很麻烦。然后灵光一闪,只需要模拟出入栈和出栈的过程顺便打印就可以了,之后就是用了stack几分钟就完成了。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值