话不多说,下面是题目
现有一个空栈c和一个正整数n,将1,2,3,...,n1,2,3,...,依次入栈,期间任意时刻出栈。然后给定一个出栈序列,问其是否是一个合法的出栈序列。
输入的要求是
第一行一个整数n(1≤n≤100),表示需要入栈的整数个数;
第二行为[1,n]的一个排列,表示一个出栈序列,整数间用空格隔开。
输出则要求输出成功为yes,失败为NO,
下面有个小tips:
初始时栈为空,即[]
。接下来按下面的顺序执行即可得到出栈序列3 2 4 1
:
1.1
入栈,此时栈为[1]
;
2.2
入栈,此时栈为[1,2]
;
3.3
入栈,此时栈为[1,2,3]
;
4.3
出栈,此时栈为[1,2]
;
5.2
出栈,此时栈为[1]
;
6.4
入栈,此时栈为[1,4]
;
7.4
出栈,此时栈为[1]
;
8.1
出栈,此时栈为[]
。
代码如下:
#include <iostream>
#include <stack>
using namespace std;
int main() {
int n;
cin >> n;
stack<int> s;
int cur = 1;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
while (s.empty() || s.top() != x) {
if (cur > n) {
cout << "No" << endl;
return 0;
}
s.push(cur++);
}
s.pop();
}
if (s.empty()) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
大致就是这样的情况