说明
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。
算法
将 pushed 队列中的每个数都 push 到栈中,同时检查这个数是不是 popped 序列中下一个要 pop 的值,如果是就把它 pop 出来。最后,检查不是所有的该 pop 出来的值都是 pop 出来了。
解析1、解析2、解析3
步骤
- 用一个辅助栈(stack)模拟pushed队列的入栈操作
- 栈是先进后出的,由此 popped[头] = stack[尾]
如果popped按排序始终能找到符合popped[头] = stack[尾],则将元素分别从stack[尾]、popped[头]出列 - 如果最后为空则true,否则是false
实现
1 | /** |