标签:
来源:牛客网 《剑指offer》
pushA={1,2,3,4,5}
popA={4,5,3,1,2}
popB={4,3,5,1,2}
先看popA,第一个是4,因此需要先将1,2,3,4都入栈,然后弹出4,此时top=3. 下一个是5,不等于top,因此需要把pushA中的下一个元素入栈,然后比较新的是否等于5. 若等于,则出栈;若不等于,则继续从pushA中将数字压栈。终止条件是栈为空或pushA数组遍历完成了。
1 public boolean IsPopOrder(int [] pushA,int [] popA) { 2 if (pushA.length==0 || popA.length==0) return false; 3 if (pushA.length!=popA.length) return false; 4 5 Stack<Integer> stack = new Stack<Integer>(); 6 stack.push(pushA[0]); // autoboxing 7 8 for(int i=1, j=0; ;){ 9 if(stack.empty()) return true; 10 if(!stack.empty() && stack.peek()!=popA[j]){ // unboxing 11 if(i==pushA.length) break; 12 stack.push(pushA[i]); 13 i++; 14 } else if(!stack.empty() && stack.peek()==popA[j]) { 15 stack.pop(); 16 j++; 17 } 18 } 19 20 return false; 21 }
标签:
原文地址:http://www.cnblogs.com/duanguyuan/p/5702110.html