码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-13 00:56:31      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:order   思路   lse   pre   位置   pop   变量   序列   port   

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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第二十一题 栈的压入、弹出序列

标签:order   思路   lse   pre   位置   pop   变量   序列   port   

原文地址:https://www.cnblogs.com/haq123/p/12185424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!