剑指offer--栈的压入、弹出序列
2015-04-11 20:14
381 查看
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。分类:栈
解法1:将入栈顺序数组逐个入栈,每次入栈,都判断是否对应出栈数组,也就是是否出栈
例如第一个入栈元素1,入栈以后,判断是否出栈,也就是对应第一个元素是否是1,而其实是4,所以不出栈
就这样一直到入栈元素4,这是相等,所以出栈
并且要向前检查,出栈直到不相等为止
如果出栈顺序正确,那么最后stack里面必然为空
import java.util.ArrayList; import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0) return false; Stack<Integer> stack = new Stack<Integer>(); int i = 0; int j = 0; while(i<pushA.length){ stack.add(pushA[i++]);//逐个入栈 while(!stack.isEmpty()&&stack.peek()==popA[j]){//按照顺序出栈 stack.pop(); j++; } } return stack.isEmpty(); } }
解法2:和解法1类似,每次入栈,检查是否应该出栈
import java.util.ArrayList; public class Solution { public boolean IsPopOrder(ArrayList<Integer> pushA,ArrayList<Integer> popA) { int index = 0; while(index<pushA.size() && index>-1){ while(index<pushA.size() && pushA.get(index)!=popA.get(0)){ index++; } if(index>=pushA.size()) return false; if(index>=0 && pushA.get(index)==popA.get(0)){ pushA.remove(index); popA.remove(0); index--; } } if(popA.size()==0) return true; return false; } }
相关文章推荐
- 剑指Offer--022-栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 《剑指Offer》面试题22:栈的压入,弹出序列
- 《剑指Offer》学习笔记--面试题22:栈的压入、弹出序列
- 剑指offer 22题 【举例让抽象具体化】栈的压入、弹出序列
- (剑指Offer)面试题22:栈的压入、弹出序列
- 剑指offer——面试题22:栈的压入、弹出序列
- 剑指Offer:栈的压入、弹出序列
- 剑指offer(12)-栈的压入弹出序列
- 《剑指offer》——栈的压入、弹出序列
- 剑指offer(18)-栈的压入、弹出序列
- 【剑指offer系列】 栈的压入和弹出序列___22
- 《剑指Offer》面试题:栈的压入弹出序列是否匹配
- 剑指offer:栈的压入、弹出序列
- 剑指offer系列之二十:栈的压入、弹出序列
- 剑指offer:(22)举例让抽象问题具体化 :栈的压入,弹出序列
- 剑指Offer_21_栈的压入、弹出序列
- 剑指offer-面试题22.栈的压入,弹出序列
- 《剑指offer》-栈的压入、弹出序列
- 剑指Offer(Java版):栈的压入、弹出序列