题目描述
已知自然数1,2,…,N(1<=N<=100)依次入栈,请问序列C1,C2,…,CN是否为合法的出栈序列。
输入
输入包含多组测试数据。
每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
第二行为N个正整数,以空格隔开,为出栈序列。
输出
对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出Yes,否则输出No。
样例输入
5
3 4 2 1 5
5
3 5 1 4 2
0
样例输出
Yes
No
import java.util.Scanner;
/**
* @author:Ravanla
* @vreate:2019-10-15-20:41
*/
public class HeFaChuZhan {
Scanner sc = new Scanner(System.in);
public HeFaChuZhan(){
int n = sc.nextInt();
while(n != 0){
Create(n);
n = sc.nextInt();
}
}
void Create(int n) {
int[] OutSeq = new int[n];
for(int i = 0; i < n; i++){
OutSeq[i] = sc.nextInt();
}
int[] Stack = new int[n];
int OutIndex = 0;
int IntNum = 1;
int Top = -1;
while(OutIndex < n ){
if(Top >= 0 && OutSeq[OutIndex] == Stack[Top]){
Top--;
OutIndex++;
}else{
if(IntNum > n){
break;
}
Top++;
Stack[Top] = IntNum;
IntNum++;
}
}
if(OutIndex >= n) System.out.println("YES");
else System.out.println("NO");
}
public static void main(String[] args) {
HeFaChuZhan h = new HeFaChuZhan();
}
}
5
3 4 2 1 5
5
3 5 1 4 2
0