赞
踩
给定一个压入序列 pushedpushed 和弹出序列 poppedpopped ,则压入 / 弹出操作的顺序(即排列)是 唯一确定 的。
如下图所示,栈的数据操作具有 先入后出 的特性,因此某些弹出序列是无法实现的。
考虑借用一个辅助栈 stack,模拟 压入 / 弹出操作的排列。根据是否模拟成功,即可得到结果。
ps:题目规定 栈的所有数字均不相等,因此在循环入栈中,每个元素出栈的位置的可能性是唯一的(若有重复数字,则具有多个可出栈的位置).
因而,在遇到 “栈顶元素 == 弹出序列的当前元素” 就应立即执行出栈。
算法流程:
时空复杂度:O(n)
class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Deque<Integer> stack = new LinkedList<>(); int i = 0; for (int num : pushed) { //num入栈 stack.push(num); // 循环判断与出栈序列是否相等 while (!stack.isEmpty() && stack.peek() == popped[i]) { stack.pop(); i++; } } return stack.isEmpty(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。