剑指offer 面试题22 栈的压入、弹出序列
来源:互联网 发布:淘宝新店怎么刷销量 编辑:程序博客网 时间:2024/05/18 13:25
剑指offer 面试题22 栈的压入、弹出序列
题目:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
假设压入栈的所有数字均不相等。
例如序列 1、2、3、4、5 是某栈的压栈序列,序列 4、5、3、2、1 是该压栈序列对应的一个弹出序列,
但 4、3、5、1、2 就不可能是该压栈序列的弹出序列。
package algorithm.foroffer.top30;import java.util.Arrays;import java.util.Stack;/** * Created by liyazhou on 2017/5/27. * 面试题22:栈的压入、弹出序列 * * 题目: * 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 * 假设压入栈的所有数字均不相等。 * 例如序列 1、2、3、4、5 是某栈的压栈序列,序列 4、5、3、2、1 是该压栈序列对应的一个弹出序列, * 但 4、3、5、1、2 就不可能是该压栈序列的弹出序列。 * * 问题: * 1. 使用辅助栈 * 2. 顺序压栈和有条件的出栈操作 * * 思路: * 1. 两个序列存储在数组中,创建一个辅助栈(数据结构) * 2. 将压入序列的"第一个元素"依次压入到辅助栈中,(算法) * 如果辅助栈的栈顶元素和弹出序列的"第一个元素"相等,则从辅助栈弹出该元素; * // 如果辅助栈为空,则继续压入压入序列中为入栈的元素; * 3. 辅助栈为空,该弹出序列是压入序列的出栈序列,返回 true;否则两者不匹配,返回 false。 * (如果辅助栈栈顶元素和弹出序列的"第一个元素"不相等,而且压入栈没有要压入辅助栈中的元素,返回 false) * * */public class Test22 { public static boolean isPopOrder(int[] pushOrder, int[] popOrder){ if (pushOrder == null || popOrder == null || pushOrder.length != popOrder.length) return false; boolean result = false; Stack<Integer> stack = new Stack<>(); int popNum = 0; for (int i = 0; i < pushOrder.length; i++){ // 依次将压入序列中的元素压入到辅助栈 stack.push(pushOrder[i]); // 从辅助栈中弹出和弹出序列中匹配的元素 while (!stack.isEmpty() && stack.peek() == popOrder[popNum]){ stack.pop(); popNum ++; } } if (stack.isEmpty()) result = true; // 压入序列和弹出序列中的所有的元素都匹配 return result; } public static void main(String[] args){ int[] pushOrder = {1, 2, 3, 4, 5}; int[][] popOrders = { {4, 5, 3, 2, 1}, {4, 5, 3, 1, 2}, {4, 5, 3, 1, 6}, }; for (int i = 0; i < popOrders.length; i++){ System.out.print("压入序列:" + Arrays.toString(pushOrder) + " "); System.out.print("弹出序列:" + Arrays.toString(popOrders[i]) + " "); System.out.println(Test22.isPopOrder(pushOrder, popOrders[i])); } }}
阅读全文
1 0
- 栈的压入、弹出序列(剑指offer面试题)
- 剑指offer面试题 栈的压入、弹出序列
- 剑指offer面试题 22 栈的压入、弹出序列的匹配
- 剑指offer面试题22栈的压入弹出序列
- 【剑指offer】面试题22:栈的压入弹出序列
- [剑指offer]面试题22:栈的压入、弹出序列
- 剑指Offer:面试题22 栈的压入、弹出序列
- 剑指offer 面试题22 栈的压入弹出序列
- 《剑指Offer》面试题22:栈的压入,弹出序列
- 《剑指Offer》学习笔记--面试题22:栈的压入、弹出序列
- 剑指offer--面试题22:栈的压入、弹出序列--Java实现
- 【剑指Offer学习】【面试题22:栈的压入、弹出序列】
- 剑指Offer面试题22(Java版):栈的压入、弹出序列
- 剑指offer代码解析——面试题22栈的压入、弹出序列
- 剑指offer-面试题22:栈的压入、弹出序列
- 剑指offer 面试题22:栈的压入、弹出序列 题解
- 剑指offer之面试题22:栈的压入、弹出序列
- 剑指offer之面试题22栈的压入、弹出序列
- RPC深入浅出--浅出篇
- [leetcode]16. 3Sum Closest
- 单调队列
- Linux命令"ls"进阶说明
- RPC深入浅出--深入篇
- 剑指offer 面试题22 栈的压入、弹出序列
- 介绍一些非常好的博客
- UVA 10881(经典模拟,trick点)
- 运算符补充
- win32(3)--消息处理机制
- 编译Linux内核
- php开发-环境搭建之mysql配置
- 桃花扇中的血与泪
- P2234 [HNOI2002]营业额统计 set~~~