思路
- 首先要判断弹出序列是否正确,我们就要根据压入和弹出的时机来判定
- 首先我们创造一个栈,然后将压入序列依次压入栈中;当压入时,要判断弹出序列与此时的栈顶元素是否相等,如果相等,则将此元素从栈中弹出;
- 依照此顺序,如果有一种压入和弹出的顺序符合的话,则最终压入栈的元素会全部弹出,栈为空。
由于题目规定 栈的所有数字均不相等
,因此在循环入栈中,每个元素出栈的位置的可能性是唯一的(若有重复数字,则具有多个可出栈的位置)。因而,在遇到 “栈顶元素 弹出序列的当前元素” 就应立即执行出栈。
算法流程
- 首先创建一个辅助栈,用来模拟栈的压入和弹出操作
- 遍历压栈的序列,先让元素入栈,然后判断栈顶元素是否等于弹出序列元素popped[index],如果相等,则执行出栈操作、index++
- 如果辅助栈为空,证明出栈顺序是可行的,则返回true
代码实现(java)
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> Spush = new Stack<>();
int index = 0;
for (int i : pushed) {
Spush.push(i);
while (index < popped.length && !Spush.isEmpty() && Spush.peek() == popped[index]) {
Spush.pop();
index++;
}
}
if (Spush.isEmpty()) {
return true;
} else {
return false;
}
}
}