栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
思路:压栈操作次数固定,用变量记录压栈次数,同时当栈顶元素与弹出序列指针所指位置相同时,执行出栈操作。
代码实现如下:
1 import java.util.*; 2 3 public class Solution { 4 public boolean IsPopOrder(int [] pushA,int [] popA) { 5 Stack s = new Stack(); 6 s.push(pushA[0]); 7 int count = 0; 8 int a=1,b=0; 9 while(count<pushA.length+1&&b<popA.length){ 10 if(s.peek().equals(popA[b])){ 11 s.pop(); 12 b++; 13 }else{ 14 if(a<pushA.length){ 15 s.push(pushA[a]); 16 a++; 17 count++; 18 }else{ 19 count++; 20 } 21 } 22 } 23 if(s.isEmpty()) 24 return true; 25 else 26 return false; 27 } 28 }
(ps:空栈执行peek方法时会发上空栈异常。。。。之前认为会返回空对象)