题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
import java.util.ArrayList; import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA, int [] popA) { if (pushA == null || popA == null || pushA.length != popA.length) return true; int popIndex = 0; Stack<Integer> datas = new Stack<>(); for (int i = 0; i < pushA.length; i++) { // 进栈 datas.push(pushA[i]); // 循环判断popA的元素是否和栈中的元素一致,一致就删掉 while (popIndex < popA.length && !datas.isEmpty() && popA[popIndex] == datas.peek()) { datas.pop(); popIndex++; } } return datas.isEmpty(); } }
解题思想:借助栈后进先出特性,逐次顺序检验pop序列是否符合栈特性,如果遍历到最后栈中没有元素了,popA还有剩余元素,说明不是栈中的弹出序列。
#算法##算法笔记#