版权声明:小简原创 https://blog.csdn.net/qq_43469554/article/details/87875730
给定 n 个数的排列 a 和一个栈,n 个值的入栈顺序为 1,2,⋯n,判断出栈顺序是否可以是排列 a。
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);//初始化为0
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
stack<int> s;
int cur = 1;
bool f = 1;//标记
for (int i = 0; i < n; i++)
{
while ((s.empty() || s.top() != a[i]) && cur <= n)//栈顶元素不等于序列a中的第i个元素
{
s.push(cur);//push元素
cur++;
}
if (s.empty() || s.top() != a[i])
{
f = 0;
break;
}
else
{
s.pop();
}
}
if (f)
{
cout << "legal" << endl;
}
else
{
cout << "illegal" << endl;
}
return 0;
}