栈的压入、弹出序列-剑指offer(java版)
来源:互联网 发布:金蝶软件建账流程 编辑:程序博客网 时间:2024/05/29 08:13
问题描述在程序注释中体现,主要思想是:创建一个辅助的堆栈,定义一个指向弹出序列第一位的指针,对于压入序列,每个数压入辅助栈中,每当压入一个数进行判断:栈顶元素与弹出序列指针所指的数进行比较,若相同则弹栈,同时指针后移一位,直到栈顶元素与指针所指元素不同,则压入下一个压入序列中的数。最终若辅助栈为空说明弹出序列为压入序列的弹出顺序。具体程序如下:
/*问题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 *例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹 *出序列。*/import java.util.ArrayList;import java.util.Stack;public class Solution12 {public boolean IsPopOrder(ArrayList<Integer> pushA,ArrayList<Integer> popA) {if(pushA.size()!=popA.size()){return false;}Stack<Integer> stack = new Stack<Integer>();int j=0; for(int i=0;i<pushA.size();i++){ stack.push(pushA.get(i)); while((!stack.empty())&&(stack.peek()==popA.get(j))){ stack.pop(); j++; } } if(stack.empty()){ return true; }else{ return false; } }public static void main(String[] args){ArrayList<Integer> pushA = new ArrayList<Integer>();pushA.add(1);pushA.add(2);pushA.add(3);pushA.add(4);pushA.add(5);ArrayList<Integer> popA = new ArrayList<Integer>();popA.add(4);popA.add(5);popA.add(3);popA.add(2);popA.add(1);Solution12 s = new Solution12();boolean res = s.IsPopOrder(pushA, popA);System.out.println(res);}}主函数中按照问题的例子验证了一下,结果为true
1 0
- 剑指Offer:栈的压入、弹出序列(JAVA)
- 剑指offer:栈的压入、弹出序列(java)
- 剑指Offer: (Java实现) 栈的压入、弹出序列
- 栈的压入、弹出序列-剑指offer(java版)
- 剑指Offer面试题22(Java版):栈的压入、弹出序列
- 【剑指offer】栈的压入、弹出序列(java版)
- 栈的压入、弹出序列(剑指offer)
- 剑指offer-栈的压入、弹出序列(标志:++)
- 剑指offer(23):栈的压入、弹出序列
- 剑指offer(18)-栈的压入、弹出序列
- 【剑指offer-Java版】22栈的压入弹出序列
- offer,栈的压入、弹出序列
- 【剑指offer】栈的压入弹出序列
- 剑指offer系列源码-栈的压入、弹出序列
- 剑指offer--栈的压入、弹出序列
- 剑指Offer之 - 栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 《剑指offer》栈的压入、弹出序列
- 结构体类型数据作为函数参数(三种方法
- Median of Two Sorted Arrays
- 小数的二进制表示,阶码
- 栈---回文判断
- java 线程的一些理解
- 栈的压入、弹出序列-剑指offer(java版)
- Symmetric Tree
- 优化 SQL SELECT 语句性能的 6 个简单技巧
- php 建造者模式
- sdcard 和mnt/sdcard 两个文件夹的区别
- MemLeak学习笔记
- 基础教程第三课
- 解决 can't find referenced pointcut
- 【Android安卓教学-零基础到高薪就业】面向对象(2)