题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
思路:这道题就是判断按着一个数组进行进栈操作,判断另一个数是否可能是出栈操作。因此,我们可以建立一个模拟栈,模拟进栈操作,当栈顶元素等于出栈数组的元素时,进行出栈(就是根据出栈数组,进行出栈操作),最后只需要看stack里面还有没有数据。(因为,如果出栈满足要求,完成操作后,stack内没有数据)
代码:
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
if(pushed.length != popped.length) return false;
Stack<Integer> stack = new Stack<>();
int j=0;
for(int i= 0;i<pushed.length;i++){
stack.push(pushed[i]);
while(!stack.isEmpty() && stack.peek() == popped[j]){
stack.pop();
j++;
}
}
return stack.isEmpty();
}
}