• 出栈合法性


    出栈合法性

    题目描述

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

     【解题思想】

  • 相关阅读:
    [Real World Haskell翻译]第24章 并发和多核编程 第一部分并发编程
    [Real World Haskell翻译]第22章 扩展示例:Web客户端编程
    [Real World Haskell翻译]第27章 网络通信和系统日志 Sockets and Syslog
    druid 解密
    git clone 所有远程分支到本地
    十、Delphi 把Json转成Delphi实体类
    XML External Entity attack/XXE攻击
    大家好!
    XXE攻防——XML外部实体注入
    ubuntu安装Go环境
  • 原文地址:https://www.cnblogs.com/0405mxh/p/10160721.html
Copyright © 2020-2023  润新知