美文网首页
栈的压入弹出顺序

栈的压入弹出顺序

作者: HamletSunS | 来源:发表于2019-07-31 08:50 被阅读0次

    题意:
    条件:给出一个栈的输入序列和一个输出序列
    问题:你判断输出序列是否合法,即通过输入序列的入栈顺序能否通过出栈操作得到输出序列。

    思路:
    设计一个栈,进行模拟和判断。
    判断思路是先按照入栈顺序每次放入一个元素(for循环),然后开始检查当前是否可以出栈,只要满足出栈条件就出栈,直到不满足出栈条件(while循环)
    可以出栈的条件为:

    1. 出栈索引合法
      (防止数组越界)
    2. 栈不为空
      (因为是在while循环里,可能栈会出空,若没有2直接判断3会数组越界)
    3. 栈的当前元素与输出序列相等
      (真正意义上的判断能否出栈,前2个条件是为了保证3的操作合法)
    class Solution {
    public:
        bool IsPopOrder(vector<int> pushV,vector<int> popV) {
            int n=pushV.size();
            if(n!=popV.size())
                return false;
            int idxIn=0,idxOut=0;
            stack<int> st;
            for(;idxIn<n;idxIn++){
                st.push(pushV[idxIn]);
                while(idxOut<n && !popV.empty() && st.top()==popV[idxOut]){
                    st.pop();
                    idxOut++;
                }
            }
            if(idxOut==n)
                return true;
            return false;
        }
    };
    

    相关文章

      网友评论

          本文标题:栈的压入弹出顺序

          本文链接:https://www.haomeiwen.com/subject/nviarctx.html