栈模拟(c++)
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> s;
int n=pushed.size();
int j=0;
for(int i=0;i<n;i++){
s.emplace(pushed[i]);
while(!s.empty()&&popped[j]==s.top()){ //判空条件放在&&前,&&第一个条件不成立就会返回false
s.pop();
j++;
}
}
return s.empty();
}
};
值得注意的是要将判空条件s.empty()放在&&前,因为&&只要是第一个条件不成立为false,就不会再去判断第二个条件,最终结果直接为false。
如果将判空条件放在&&之后(popped[j]==s.top()&&!s.empty()),那么当栈根据popped数组弹出最后一个数后,j加1,此时j=popped.size(),而popped数组下标最大值为popped.siz()-1(下标从0开始),由于先判断&&前的条件,所以程序将会报错。