• 根据入栈顺序判断出栈顺序的合法性


    这道题不管是面试还是笔试的选择题都非常爱出的一道题
     
    题目描述:
    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,5,2,3,1就不可能是该压栈序列的弹出序列。
    输入:
    每个测试案例包括3行:
    第一行为1个整数n(1<=n<=100000),表示序列的长度。
    第二行包含n个整数,表示栈的压入顺序。
    第三行包含n个整数,表示栈的弹出顺序。
    输出:
    对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出压栈弹栈顺序,否则输出这不可能
     
     
     1 string Judge(int n_values, int input [],int output[])
     2 {
     3                  assert(input && output && n_values > 0);
     4                  Stack<int ,100> s1;
     5                  string result;
     6                 s1.Push( input[0]);//为了防止数组越界访问造成崩溃,先将第一个数压栈开辟好数组空间
     7                 result.append(1, 'R');//因为有入栈操作
     8                  int out = 0;
     9                  int in = 1;//因为有入栈操作,所以入栈数组计数加1
    10                  while (out < n_values )//循环结束条件是完美的匹配了出栈顺序,出栈计数到达出栈数组末尾
    11                 {
    12                                  if (in > n_values )//如果入栈计数先到达入栈数组末尾,证明没有数可以再入栈,但此时出栈数组还没走完,说明这个出栈顺序根本不可能完成
    13                                 {
    14                                                 result = "这不可能!" ;
    15                                                  return result;
    16                                 }
    17                                  if (s1.Top() == output [out])
    18                                 {
    19                                                 s1.Pop();//当前栈顶元素恰好和出栈顺序的一样,赶紧出栈
    20                                                 result.append(1, 'C');
    21                                                 out++;
    22                                 }
    23                                  else
    24                                 {
    25                                                 s1.Push( input[in]);//栈顶元素和出栈数组的当前指向不一致,只能继续入栈
    26                                                 result.append(1, 'R');
    27                                                 in++;
    28                                 }
    29                 }
    30                  return result;
    31 }
    32  
  • 相关阅读:
    .NET CORE 技术债
    .Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索
    托管ASP.NET Core应用程序到Windows服务中
    Office在线预览及PDF在线预览的实现方式大集合
    Ubuntu 16.10 虚拟机安装记录
    .Net Core 之 图形验证码
    Ubuntu之Mysql安装及基本设置
    .Net Core 之 Ubuntu 14.04 部署过程
    常用.net反编译替换正则表达式
    江湖救急:webbrowser中js文件丢失问题~
  • 原文地址:https://www.cnblogs.com/lenomirei/p/5354262.html
Copyright © 2020-2023  润新知