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
如果你觉得本篇文章对你有帮助的话,可以点个赞,感谢支持~