2020-05-15
1.题目描述
验证栈序列
2.题解
这个题目我本科的一位老师在给我们上算法课的时候讲过,他说关键是要明白我们什么时候需要入栈,什么
时候需要出栈,题目是要返回pushed数组能不能经过一系列入栈、出栈操作得到popped数组,对于pushed
数组中的元素而言,什么时候要入栈呢?如果说popped数组中的元素还没有在pushed数组中找到的话,就需
要入栈一直到找到该元素为止,如果找不到,直接返回false,如果栈顶元素等于当前pusheed数组的元素值,
则进行出栈操作即可,最后再看能不能通过一系列出栈操作得到popped数组剩下的元素。
3.代码
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int l=pushed.size();
int i=0,j=0; // i->pushed,j->popped
stack<int> mystack;
while (j<l&&i<l){
if (!mystack.empty()&&mystack.top()==popped[j]){ // 出栈
mystack.pop();
j++;
continue;
}
while (i<l&&pushed[i]!=popped[j]){ // 入栈
mystack.push(pushed[i]);
i++;
}
if (i>=l) return false;
i++;j++;
}
while (j<l){
if (popped[j]!=mystack.top()) return false;
j++;
mystack.pop();
}
return true;
}
};