剑指Offer第二十一题 栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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方法时会发上空栈异常。。。。之前认为会返回空对象)

猜你喜欢

转载自www.cnblogs.com/haq123/p/12185424.html