题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
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; } };