出栈合法性

Posted 0405mxh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了出栈合法性相关的知识,希望对你有一定的参考价值。

出栈合法性

题目描述

已知自然数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

 [实例代码]

 1 package homework;
 2 
 3 import java.util.Arrays;
 4 import java.util.Scanner;
 5 
 6 public class aaaaa {
 7 
 8     public static void main(String[] args) {
 9         Scanner scanner =new Scanner(System.in);
10         int N=scanner.nextInt(); //表示有多少的元素要进栈分别为1、2、3...N-1、N
11         int[] R=new int[100];//用来表示结果,如果为1代表合法,否则不合法
12         int L=0;//R数组的下标
13         while(N!=0) { //‘0’代表退出
14             int[] data=new int[N];//装输入出栈结果
15             int[] temp=new int[N];//装正确的进栈结果,用于跟data匹配
16             for(int i=0;i<N;i++) {
17                 data[i]=scanner.nextInt();
18                 temp[i]=0;//先赋值为0,表示车还没有进栈
19             }
20             int j=0,k=0,i=1;//j和k分别用于temp数组和data数组匹配,i为车进栈的顺序或者说是车牌号
21             while(i<=N) {//车准备好啦
22                 if(j>=0&&temp[j]==0) { //如果当前这个位置没有车,那就进来一辆车
23                     temp[j]=i++;//按顺序进栈
24                 }
25                 if(j<0) {//假如刚进来一辆车就出去,那么j可能小于0,防止下标越界
26                     j++;
27                     continue;
28                 }
29                 while(j>=0&&data[k]==temp[j]) {//已经进栈的车如果和输出出栈的顺序匹配,那就出栈一辆车,直到不匹配为止或是车全部出栈
30                     k++;
31                     temp[j]=0;//车出栈之后,改位置没有车,于是置为零,等待下一辆车进栈
32                     j--;
33                 }
34                 j++;
35             }
36             if(temp[0]==0) {//如果车出栈顺序正确,那么车站里没有车,那么第一个位置为空,即为‘0’,否则不为‘0’
37                 R[L]=1;//正确置为1,否则为0
38             }else {
39                 R[L]=0;
40             }
41             L++;
42             N=scanner.nextInt();
43         }  
44         for(int i=0;i<L;i++) {//输出格式
45             if(R[i]==1) {
46                 System.out.println("Yes");
47             }else {
48                 System.out.println("No");
49             }
50         }
51     }
52 }

 【解题思想】

技术分享图片

 


以上是关于出栈合法性的主要内容,如果未能解决你的问题,请参考以下文章

134. 判断出栈序列合法性

程序员面试冲刺,Leetcode946,合法的出栈序列

数据结构 出栈序列的合法性面试

栈和队列的常见题型

判断是否是合法的出栈序列

剑指offer判断出栈序列是否合法