栈的压入弹出系列

栈的压入、弹出序列

https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=11174&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路:利用栈进行模拟即可,将压入序列数据进行入栈,同时对比弹出序列,如果压入数据等于弹出数据,则将数据压入后进行弹出,同时判断范围是否越界,最后在遍历完弹出序列后,判断序列是否为空
解法1:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int id = 0;
        for(int i=0;i<popV.size();i++)
        {
            while(st.empty()||st.top()!=popV[i])//st为空,进行入栈;st栈顶等于弹出序列,将数据进行弹出
            {
                st.push(pushV[id++]);
                if(id>pushV.size())//范围越界,说明不是正确弹出序列
                {
                    return false;
                }
            }
            st.pop();
        }
        if(st.empty())//栈为空,说明是正确弹出序列
            return true;
        else
            return false;
    }
private:
    stack<int> st;
};

解法2:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int id = 0;
        for(int i =0;i<pushV.size();i++)
        {
            st.push(pushV[i]);
            while(!st.empty()&&st.top()==popV[id]&&id<popV.size())
            {
                st.pop();
                id++;
            }
        }
        if(st.empty())
            return true;
        else
            return false;
    }
private:
    stack<int> st;
};
全部评论

相关推荐

HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务