😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
一、题目
1、题目描述
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。
2、原题链接
二、解题报告
1、思路分析
(1)用栈模拟出栈入栈即可,这里可以用语言自带的栈,也可以用数组模拟栈。用数组模拟栈更快。
2、代码详解
//用java的Stack做
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> sta = new Stack();
int pop = 0;
for(int i = 0;i < pushed.length;i++) {
sta.push(pushed[i]);
if(sta.peek() == popped[pop]) {
while(!sta.isEmpty() && sta.peek() == popped[pop]) {
sta.pop();
pop++;
}
}
}
return sta.isEmpty();
}
}
//用数组模拟栈
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
int[] q = new int[1010];
int tt = -1;
int pop = 0;
for(int i = 0;i < popped.length;i++) {
q[++tt] = pushed[i];
while(tt >= 0 && q[tt] == popped[pop]) {
tt--;
pop++;
}
}
return tt == -1;
}
}
三、本题知识
栈