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

Posted haq123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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方法时会发上空栈异常。。。。之前认为会返回空对象)

以上是关于剑指Offer第二十一题 栈的压入弹出序列的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 栈的压入弹出序列

剑指offer 栈的压入弹出序列

剑指Offer:栈的压入弹出序列31

剑指offer:面试题22栈的压入弹出序列

栈的压入弹出序列-剑指Offer

剑指offer-栈的压入弹出序列