题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
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; } }#刷题心得#