• 栈的压入、弹出序列


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

  • 相关阅读:
    百度图片
    在线人数统计
    mysql简易导入excel
    asp.net 导出excel带图片
    C# 正则验证
    js生成随机数
    YQL获取天气
    取html里的img和去html标签
    客户端信息获得《转》
    使用ASP.NET上传图片汇总
  • 原文地址:https://www.cnblogs.com/haq123/p/12185424.html
Copyright © 2020-2023  润新知