PAT-Pop Sequence (25)

来源:互联网 发布:百会软件 编辑:程序博客网 时间:2024/05/01 01:10

题意:

模拟出栈顺序

解答:

对于每行要测试的数据,单独进行模拟验证,符合要求输出YES,否则输出NO。

再验证流程:

1. 设置一个索引 index = 0,如果第一个待检测数值为X,则把 index+1 ~ X的数据全部入栈,并把 index 设置为 X,同事还要保证栈的容量不能超标。之后再弹出栈顶原素,和第一个待检测数值比较。

2. 接着判断第二待检测原素Y,如果 index > Y,则直接从栈顶弹出原素和Y比较。如果 index < Y,把 index+1 ~ Y的数据全部入栈,并把 index 设置为 Y,同时还要保证栈的容量不能超标。之后再弹出栈顶原素,和待检测数值 Y 比较。
再弹出栈顶原素和待检测数值比较时,需要判断栈顶是否为空。

3. 重复操作 2 即可

在比较过程中,发现不符号要求即可终止判断。
具体java代码如下:
import java.util.*;public class Main{    static int M;    static int N;    static int K;    static int[] a;     public static void main(String[] args){        Scanner in=new Scanner(System.in);         M=in.nextInt();         N=in.nextInt();         K=in.nextInt();          a=new int[N];                for(int i=0;i<K;i++){          for(int j=0;j<N;j++){              a[j]=in.nextInt();                      }                seq(a);                   }                   }    public static void seq(int[] a){        int index=0;        Stack<Integer> stack=new Stack();            for(int j=0;j<N;j++){               if(a[j]>index){                 for(int k=index+1;k<=a[j];k++){                     stack.push(k);                     if(stack.size()>M){                         System.out.println("NO");                                              return;                     }                 }                   index=a[j];               }              if(stack.isEmpty()){                  System.out.println("NO");                                 return;              }              int val=stack.pop();              if(val!=a[j]){                  System.out.println("NO");                                  return;              }           }                         System.out.println("YES");           }           }



0 0
原创粉丝点击