题解 | #栈的压入、弹出序列#

class Solution
{
public:

    bool IsPopOrder(vector<int>& pushV, vector<int>& popV)
    {
        stack<int> st;
        int pushi=0, popi = 0;
        //依次入pushV的数据,栈顶数据与出栈序列匹配,如果匹配,将匹配的数据pop
        while (pushi < pushV.size())
        {
            //入数据
            st.push(pushV[pushi++]);

            //不匹配
          if (st.top() != popV[popi])
            {
                continue;
            }
            //栈顶数据与出栈序列匹配,将栈顶的数据pop
            else
            {
                while( !st.empty()  && st.top() == popV[popi]   )
               {
                 //将匹配的数据pop
                st.pop();
                popi++;
               }
            }

        }
        return st.empty();//如果栈为空,则符合题意
    }

};

模拟一个栈的push和pop操作

1 、定义pushi 和popi,pushi 遍历pushV ,popi 遍历popV

2、依次入pushV的数据, 如果栈顶数据与popV中的数据不匹配,则继续入数据

如果栈顶数据与popV中的数据匹配,将栈顶数据pop ,popi往后走

注意此时pushi不需要走,可能栈顶还有数据与popV中的数据匹配

3、这个程序执行完,栈中为空,说明符合题意

全部评论

相关推荐

点赞 评论 收藏
分享
07-24 16:39
已编辑
门头沟学院 测试开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务