题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
//重要思想:定义两个指针,一个指向入栈数组,一个指向出栈数组;每次指针后移必然有一次出栈或入栈操作,否则就是出栈数组错误
//两个指针对应两个循环,
//指针后移必有栈操作:两种栈操作对应了if-else分支语句,控制出栈和入栈对应的条件
public static boolean IsPopOrder(int [] pushA,int [] popA) {
Stack<Integer> stack = new Stack<Integer>();
int j=0;
for(int i=0;i<popA.length;i++) {//入栈指针
while(true) {
if(!stack.isEmpty()&&stack.peek()==popA[i]) {//出栈条件:数组不为空,栈顶值等于当前出栈值
stack.pop();
break;
}else if(j<popA.length&&(stack.search(popA[i])==-1)) {//入栈条件:入栈指针小于入栈数组长度,当前出栈值不再栈内
stack.push(pushA[j]);
j++;//出栈指针
}else {
return false;
}
}
}
return true;
}
}
#刷题心得#
