题解 | 栈的压入、弹出序列
class Solution {
public:
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
// write code here
int n = pushV.size();
stack<int> s;
int j = 0;//j为输入数组的下标
int i = 0;//i为输出数组的下标
while(j<n){//输入数组全部输入为止
if(j<n && (s.empty() || s.top()!=popV[i])){
//未全部输入且栈顶元素与弹出元素不一致,则压入
s.push(pushV[j]);
j++;
}
else{//if条件中,j<n一定为真,则else代表s不为空且s.top() ==popV[i]
s.pop();
i++;
}
}
while(s.top()==popV[i]){//对照剩余元素直到出现不同元素或栈空
s.pop();
i++;
if(s.empty())
break;
}
if(s.empty()){
return true;
}
return false;
}
};
