栈的压入和弹出

栈的压入、弹出序列

http://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106

/*
模拟出栈入栈
用一个栈s保存入栈序列,
当找到出栈的元素后出栈,符合出栈序列就出栈,不符合继续入栈。
直到入栈序列全部遍历完,s中是否还有元素
*/

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        if(pushV.size()!=popV.size())return false;
        int i=0,j=0;
        stack<int> s;//s保存入栈序列
        while(i<pushV.size()){//当入栈序列全部遍历完结束
            if(pushV[i]!=popV[j]){//把出栈的元素前的所有值入栈
                s.push(pushV[i]);++i;//记录入栈序列访问位置
            }else{
                ++i;++j;//入栈,出栈访问位置后移,代表已经入栈出栈。
                while(!s.empty()&&s.top()==popV[j]){//判断已经入栈的元素是否符合出栈序列,继续出栈
                s.pop();++j;//否则继续入栈找到出栈元素。
                }
            }
        }
        if(s.empty())return true;//最后还有元素没有出栈返回false
        return false;
    }
};

全部评论

相关推荐

牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务