对序列进行重组
样例输入:5
1 2 3 4 5
5
5 4 1 2 3
6
6 5 4 3 2 1
样例输出:
Yes
No
Yes
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
int main()
{
const int MAXN=1100;
int n,target[MAXN];
while(cin>>n)
{
stack<int> s;//声明一个名为s的栈
int A=1,B=1;
for(int i=1;i<=n;i++)
{
cin>>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;
}
}
if(ok==1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
这个代码仔细感受一下对我们的帮助还是挺大的感觉
栈 先进入的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
用STL栈实现程序可读性强 简单易懂