zoukankan      html  css  js  c++  java
  • 栈的压入、弹出序列

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

  • 相关阅读:
    可输入下拉框
    display:table-cell 相当于td
    循环拼接HTML
    jq操纵select
    echarts柱状图使用
    原生js 获取路由参数
    js下拉模糊查询
    ie 的hack
    vue 兼容ie11
    vuecli中的绝对路径和相对路径
  • 原文地址:https://www.cnblogs.com/haq123/p/12185424.html
Copyright © 2011-2022 走看看