Sword31——栈的压入、弹出序列
方法1——模拟
- 思路:按照给定的入栈顺序和弹出顺序进行,最后栈中若无元素,则证明为可行
- 特殊情况与临界分析:无,因为pushed和popped长度相等,当二者均为空时也是可行
- 终止条件:栈为空即代表可行
- 步骤:
- 定义一个栈
- 定义弹出顺序数组的下标
- foreach循环入栈顺序数组
- 将当前元素压入栈中
- 循环条件:栈非空,且栈顶元素等于弹出顺序数组中下标对应的元素
- while循环
- 判断此时栈是否为空,为空则可行,否则不可行
public boolean validateStackSequences(int[] pushed, int[] popped) {
Deque<Integer> stack = new LinkedList<>();
int index = 0;
for (int num : pushed) {
stack.push(num);
while (!stack.isEmpty() && stack.peek() == popped[index]) {
stack.pop();
index++;
}
}
return stack.isEmpty();
}
![方法1——模拟](https://i-blog.csdnimg.cn/blog_migrate/f70eeca06b2c3f06ae79987e42774419.png)