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

栈的压入弹出顺序

作者: 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;
    }
};

相关文章

  • 剑指offer-21~25

    21.栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压...

  • 刷前端面经笔记(十一)

    1.栈的压入和弹出 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压...

  • 31:栈的压入、弹出序列

    题目31:栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断二个序列是否为该栈的弹出顺序。假...

  • 剑指offer.C++.code21-25

    21. 栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假...

  • 《剑指offer》— JavaScript(21)栈的压入、弹出

    栈的压入、弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。...

  • 面试题31. 栈的压入、弹出序列

    栈的压入、弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。...

  • 栈的压入弹出顺序

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

  • 22 栈的压入、弹出序列 (栈混洗 stack permutat

    栈的压入、弹出序列 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出...

  • 剑指offer刷题记录(C++版本)(之三)

    21.栈的压入,弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出...

  • JZ-021-栈的压入、弹出序列

    栈的压入、弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺...

网友评论

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

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