leetcode946. 验证栈序列
模拟栈的操作,用辅助数组a记录元素在不在栈中,当a[i]为1是表示元素i在栈中,当a[i]为0时表示元素i不在栈中。遍历弹出序列的数组popped,当遇到该元素不在栈中的时候,根据入栈序列pushed依次把元素入栈,直到该元素入栈;如果该元素已经在栈中,则判断栈顶元素是否为该元素,如果不是,则序列非法;如果是,则让该元素出栈。
bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize){
int stack[1000];//栈
int a[1000];//辅助数组,判断元素在不在栈中
int top=-1;//栈顶指针
int i=0,j=0;
memset(a,0,sizeof(a));
for(int j=0;j<poppedSize;j++){
while(!a[popped[j]]){//不在栈中
//持续入栈直到元素在栈中
stack[++top]=pushed[i];
a[pushed[i++]]=1;
}
if(stack[top]!=popped[j])//如果栈顶元素不是当前需要出栈的元素
return false;//序列非法
a[stack[top--]]=0;//出栈
}
return true;
}