栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序

思路:纯粹的模拟栈的压入和弹出顺序
分别遍历压栈序列seq1和另一个序列seq2
比较当前栈顶元素和seq2的当前值
如果相等,那么弹出,seq2的指针下移
如果不等,那么依次压入seq1中的元素直到遇到栈顶等于当前seq2指针所知元素
如果上述遍历中将seq1中所有数据都压入栈之后,仍未找到seq2当前元素,那么失败
如果遍历完,两个序列的指针都到达末尾,那么成功

public class _Q22 {public boolean IsPopOrder(int seq1[], int seq2[]){if(seq1 == null) return false;if(seq2 == null) return false;// 此处应该抛出异常提示调用者if(seq1.length != seq2.length) return false;boolean result = true;Stack<Integer> stack = new Stack<>();int seq1Index = 0;stack.push(seq1[seq1Index++]);for (int i = 0; i < seq2.length;) {if (seq2[i] == stack.peek()) {i++;stack.pop();} else {if (seq1Index < seq1.length) {stack.push(seq1[seq1Index++]);}else{result = false;break;}}}return result;}}

测试代码:

public class _Q22Test extends TestCase {_Q22 popOrder = new _Q22();public void test(){int seq1[] = {1, 2, 3, 4, 5};int seq2[] = {4, 5, 3, 2, 1};int seq3[] = {4, 3, 5, 1, 2};int seq4[] = {5};System.out.println(popOrder.IsPopOrder(seq1, seq2));System.out.println(popOrder.IsPopOrder(seq1, seq3));System.out.println(popOrder.IsPopOrder(seq4, seq4));System.out.println(popOrder.IsPopOrder(null, null));}}

【剑指offer-Java版】22栈的压入弹出序列相关推荐

  1. 剑指offer面试题[22]-栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...

  2. 剑指offer(21)栈的压入、弹出序列

    题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该 ...

  3. 剑指offer-21.栈的压入弹出序列

    1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  4. 数据结构与算法--举例分析法- 栈的压入弹出序列

    举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...

  5. 剑指offer(21)栈的压入、探出序列

    链接:https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106 思路:借用一个辅助的栈,遍历压栈顺序,先将第 ...

  6. 剑指offer面试题31. 栈的压入、弹出序列(链表)

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...

  7. python 栈的压入弹出序列

    | 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...

  8. 剑指offer java版 test3—从尾到头打印链表

    标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...

  9. 剑指offer 31.栈的、压入弹出序列

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是 ...

最新文章

  1. Tensorflow【实战Google深度学习框架】—TensorBoard
  2. pythonos模块修改文件名_python如何动态改变文件名
  3. bocketmq 多个消费者同时_菜鸟开建“海南跨境物流枢纽”让自贸港消费者海购最快当日达...
  4. java list 循环赋值_Java List集合的坑(add方法报空指针,循环赋值时list已保存的值会改变)...
  5. 数学建模灵敏度分析_数学建模中的灵敏度分析,到底在分析什么?
  6. iOS字符串常用用法
  7. 数学不好,能学好机器学习吗?
  8. 牛掰本机限速软件appband
  9. 于谦加盟高德地图 推出“哪儿都熟”相声导航
  10. 【Docker】ERROR: Could not find a version that satisfies the requirement pytest==5.0.1
  11. 如何处理Spring、Ibatis结合MySQL数据库使用时的事务操作
  12. cmd复制文件到其他目录
  13. 第6章 项目进度管理
  14. vs2010中正确加载gif格式图片
  15. Anaconda中Python版本更新
  16. c#处理未捕获的异常(UnhandledException)
  17. 武汉大学计算机学院 论文,武大计算机学院教授分享:学术论文投稿与Rebuttal经验...
  18. 分位数回归的实现方法
  19. 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))
  20. 全国计算机excel公式大全,《大学计算机基础》3--Excel函数大全(335个函数).doc

热门文章

  1. python windows ui自动化_appium+python+windows UI自动化 四.简单使用Appium客户端
  2. 标签传播算法_复杂网络社区发现算法汇总
  3. mciSendString 的两个小坑
  4. List和List的区别?
  5. 管理数据,应用程序和主机安全-B
  6. HDU 3466 01背包变形
  7. Recursive Bubble Sort(递归冒泡排序)
  8. c++ 11 多线程处理(1)
  9. 关于Oracle数据库用户密码过期的预防和解决办法
  10. Windows 如何在cmd命令行中查看、修改、删除与添加环境变量