#include<stdio.h>
const int Maxn = 1000 + 10;
int n,target[Maxn];
int main()
{
while(scanf("%d",&n) == 1)
{
int stack[Maxn],top = 0;
int a = 1,b =1;
for(int i = 1; i <= n; i ++ )
scanf("%d",&target[i]);
int ok = 1;
while(b<=n)
{
if(a == target[b]){a++; b++; // 顺序序列
}else if(top && stack[top] == target[b]){ //栈不空并且栈元素与数组元素对等。逆序序列
top--;b++;
}else if(a<=n) stack[++top] = a++; // 初始化栈,并且top=n;a = n;
else {
ok = 0; break;
}
}
printf("%s\n",ok?"Yes":"No");
}
return 0;
}
#include<cstdio>
#include<stack>
const int Maxn = 1000 + 10;
int n,target[Maxn];
int main()
{
while(scanf("%d",&n) == 1)
{
stack<int> s;
int a = 1,b = 1;
for(int i =1 ; i <= b; i ++) scanf("%d",target[i]);
int ok =1;
while(b <= n)
{
if(a == target[b]) {
a++; b ++; //顺序元素
}else if(!s.empty() && s.top() == target[b]) {
s.pop(); b++; //对比并出栈
}else if(a <= n) s.push(a++);// 压栈
else {
ok = 0; break;
}
}
printf("%s\n",ok?"Yes":"No");
}
return 0;
}
栈
最新推荐文章于 2025-05-29 23:36:29 发布