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

    1就是说可以不是连续压的  压几个弹出几个  顺序不定!!

    【思路】借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,
    这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,
    这样循环等压栈顺序遍历完成,如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。 举例: 入栈1,2,3,4,5 出栈4,5,3,2,1 首先1入辅助栈,此时栈顶1≠4,继续入栈2 此时栈顶2≠4,继续入栈3 此时栈顶3≠4,继续入栈4 此时栈顶4=4,出栈4,弹出序列向后一位,此时为5,,辅助栈里面是1,2,3 此时栈顶3≠5,继续入栈5 此时栈顶5=5,出栈5,弹出序列向后一位,此时为3,,辅助栈里面是1,2,3 …. 依次执行,最后辅助栈为空。如果不为空说明弹出序列不是该栈的弹出顺序。

      

    class Solution {
    public:
        bool IsPopOrder(vector<int> pushV,vector<int> popV) {
         bool  ispoporder=false;  
         stack<int> s;
           int j=0;  
            
           if(!pushV.empty()&&!popV.empty()&&(pushV.size()==popV.size())) //加上这句长度相等
           {
            for(int i=0;i<pushV.size();i++)// i 是循环压栈序列 
            {
             s.push(pushV[i]);//压栈序列入栈
                
                while(j<popV.size()&&!s.empty()&&s.top()==popV[j])// j是循环出栈序列
               {
                   s.pop();
                   ++j;//向后进行
               }
            }
          
         if(s.empty())//辅助栈为空 
           ispoporder=true;  
    
            } 
         return  ispoporder;  
            
        }
    };
  • 相关阅读:
    springmvc
    POJ 3683 Priest John's Busiest Day
    POJ 3678 Katu Puzzle
    HDU 1815 Building roads
    CDOJ UESTC 1220 The Battle of Guandu
    HDU 3715 Go Deeper
    HDU 3622 Bomb Game
    POJ 3207 Ikki's Story IV
    POJ 3648 Wedding
    HDU 1814 Peaceful Commission
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11389142.html
Copyright © 2011-2022 走看看