import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param input int整型一维数组
     * @return int整型一维数组
     */
    public int[] queueFromStack (int[] input) {
        // stack1用于存储插入形式的数值,例如1,2,3
        Stack<Integer> stack1 = new Stack<>();
        // stack2用于辅助进行出栈操作,变成队列,相当于一个倒置的容器,又因为栈是先进后出,变成队列
        Stack<Integer> stack2 = new Stack<>();
        // 集合用来存储返回结果
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (int i = 0; i < input.length; i++) {
            int number = input[i];
            if (number > 0) {
                stack1.push(number);
            } else {
			  // 如果数字为负数,表示要出栈
			  // 检查栈二是否为空,如果是空,而且栈1此时有元素存在,将栈1元素转移到栈2,
                while (stack2.isEmpty()) {
                    while (!stack1.isEmpty()) {
                        stack2.push(stack1.pop());
                    }
                }
			  // 此时栈2的pop已经是队列顺序,因为pop会删除并返回该元素,直接添加到结果集合中,peek方法不会删除,但会返回栈顶元素
                arrayList.add(stack2.pop());
            }
        }
        int [] result = new int[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++) {
            result[i] = arrayList.get(i);
        }
        return result;
    }
}

本题知识点分析:

1.栈的出栈和入栈

2.队列特点

3.数学模拟

4.集合存取

5.集合转数组

本题解题思路分析:

1.用两个栈去模拟队列,一个栈存放插入的元素,一个栈用来辅助出栈的元素,去模拟队列操作

2.想象一下,将某个栈的元素按照先进后出的顺序放入另外一个栈,比如1,2入栈1,然后顺序是2,1入栈2,此时栈2的顶端是1,压栈的元素是2,那么此时去pop就实现了 {1,2} 的队列先进先出的特性。

本题使用编程语言:Java

如果你觉得本篇文章对你有帮助的话,可以点个赞,感谢支持~