这题我们首先判断push和pop中元素数目是否相等,
如果不相等直接返回false。
接着创建一个辅助数组a,和指针top、i和k;
让他们分别指向数组a、压入栈和弹出栈。
先将top,i,k初始化为零,即使他们指向栈底。(top指向数组元素的上一个位置)
然后先将push中的第i个元素放入辅助数组a(即a[top++]=push[i++]),
再判断a[top-1]是否与popped[k]相等,
相等的话top下移一个位置(top>0的前提下),k向上移动一个位置。
如果push元素全部传入辅助数组a后top==0;
说明该操作序列可以实现,即返回true;
否则返回false。
具体操作原理如下(以示例二为例):
bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize){
if(pushedSize!=poppedSize)
return false;
int a[pushedSize],top=0,k=0,i=0;
memset(a,0,sizeof(a));
while(i<pushedSize)
{
a[top++]=pushed[i++];
while(top>0&&a[top-1]==popped[k])
{
top--;
k++;
}
}
if(top==0)return true;
else return false;
}