方法1:
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> mys;
int j=0;
for(int i=0;i<pushed.size();i++)
{
if(pushed[i]!=popped[j]) mys.push(pushed[i]);
else{
j++;
while(!mys.empty()){
if(j==popped.size()) return false;
if(mys.top()==popped[j])
{ mys.pop(); j++;}
else break;
}
}
}
while(!mys.empty()){
if(j==popped.size()) return false;
if(mys.top()==popped[j])
{ mys.pop(); j++;}
else return false;
}
if(j!=popped.size()) return false;
return true;
}
};
方法2:
其实stack是多余的。在遍历数组pushed的时候,pushed[i]其实就是stack栈顶的元素,这时候,pushed[i-1]、push[i-2]...这些位置已经是"空闲"出来了,所以完全可以用数组pushed来取代stack的作用。
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int size=0,j=0;
for(int i=0;i<pushed.size();i++)
{
pushed[size++]=pushed[i];
while(size>0 && pushed[size-1]==popped[j])
{j++;size--;}
}
return (size==0 && j==popped.size());
}
};