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

栈的压入、弹出序列

https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int u=pushV.size();
        int ps_cur = 0;
        int v=popV.size();
        int pp_cur = 0;
        vector<int> tmp;
        int t_cur = -1;

        //最多运行次数是push的两倍,每次只能压入或者弹出,如果完全弹出成功需要2倍的次数。循环结束后如果辅助栈不是栈底-1就说明弹出失败。
        for(int i=0;i<2*u;i++){
            if(t_cur == -1 || tmp[t_cur]!=popV[pp_cur]){
                if(ps_cur<u){//控制边界条件,如果超过就不继续压栈,浪费循环次数
                    t_cur++;
                    tmp.push_back(pushV[ps_cur]);
                    ps_cur++;//最后一次超过边界,就不会继续执行此块
                }
            }else if(tmp[t_cur]==popV[pp_cur]){
                tmp.pop_back();
                t_cur--;
                pp_cur++;
            }
        }
        if(t_cur==-1){
            return true;
        }
        
        return false;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务