946. 验证栈序列
题目链接
https://leetcode.cn/problems/validate-stack-sequences/
相关算法
栈、模拟
题目描述
给定 pushed
和 popped
两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push
和弹出 pop
操作序列的结果时,返回 true
;否则,返回 false
。
数据范围:
1 <= pushed.length <= 1000
0 <= pushed[i] <= 1000
pushed
的所有元素 互不相同popped.length == pushed.length
popped
是pushed
的一个排列
解题思路
本题的解题思路还是比较简单的,按照题意进行模拟即可。已知 popped
数组为出栈数组,pushed
数组为进栈顺序,我们可以视 poped
数组为一个栈,我们只需要额外维护一个栈,将 pushed
数组依次进栈的同时,尝试让栈顶出栈,如果栈顶元素等于 poped
栈顶元素,就将两个栈顶元素都出栈。最终,如果维护的栈为空,就说明符合条件。
完整代码
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> stack = new Stack<>();
for (int i = 0, j = 0; i < pushed.length; i++) {
stack.push(pushed[i]);
while (!stack.isEmpty() && stack.peek() == popped[j]) {
stack.pop();
j++;
}
}
return stack.isEmpty();
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)