题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
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;
}
};
腾讯云智研发成长空间 241人发布
