美文网首页算法练习
判断出栈序列是否合法

判断出栈序列是否合法

作者: 倚剑赏雪 | 来源:发表于2020-02-18 21:51 被阅读0次

题目

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

解析

1.将入栈序列中的元素依次入栈, 并使用一个指针 j 指向下一个出栈序列中即将出栈的元素。
  2. 每当一个元素入栈后,若此时指针 j 指向的元素与当前栈顶元素相等则进行一次出栈操作,并且将指针j后移一位,重复红色前面描述的过程。
 3. 查看栈是否为空,即是否所有元素都成功出栈

 bool  CheckIsValidOder(int[] push,int[] pop)
    {
        if (push.Length == 0) return false;
        Stack<int> tempStack = new Stack<int>(); // 模拟栈
        for (int i = 0,j = 0; i <push.Length; i++)
        {
            tempStack.Push(push[i]);
            //判断相等,则出栈,指针都向前加一
            while (tempStack.Count>0&&j<pop.Length&&pop[j] == tempStack.Peek())
            {
                tempStack.Pop();
                j++;
            }
        }

        return tempStack.Count == 0;
    }

相关文章

  • 判断出栈序列是否合法

    题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字...

  • 王道数据结构 第三章 栈和队列 编程题1

    栈部分 判断栈的操作序列是否合法(栈的初始状态和终止状态均为空)。若合法,返回true,反之返回false,操作序...

  • 栈的压入弹出顺序

    题意:条件:给出一个栈的输入序列和一个输出序列问题:你判断输出序列是否合法,即通过输入序列的入栈顺序能否通过出栈操...

  • 栈-N946-验证栈序列

    题目 概述:给定一个入栈序列和出栈序列,判断如果以入栈序列的顺序入栈,所给定的出栈序列的顺序是否是合理的 输入:入...

  • A1051 Pop Sequence (25分)

    /*题意:1、给一个最大M的栈,给N个数字(1...N),判断给的栈序列栈序列是否合法2、输入,M,N,以及K组 ...

  • 栈有效出栈序列

    给定栈的输入顺序push和输出顺序pop,判断pop序列是否是可能的出栈序列。限定条件:push,pop元素不重复...

  • 面试题31:栈的压入,弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入操作,第二个序列表示栈的弹出顺序,假设所有数字不相等,请判断是否合法...

  • ACM——栈

    知识点: (原理)所谓栈即只能单进单出的顺序列,对于一串以某种顺序进栈的数列A我们要判断它是否能通过某种序列B出栈...

  • 一些常见的算法题目

    合法的出栈序列 已知1至n的数字序列,按顺序入栈,每个数字入栈后即可出栈,也可在栈中停留,返回等待后面的数字入栈出...

  • 合法的出栈序列

    poj 1363 Rails已知从1至n的数字序列,按顺序入栈,每个数字入栈后即可出栈,也可在栈中 停留,等待后面...

网友评论

    本文标题:判断出栈序列是否合法

    本文链接:https://www.haomeiwen.com/subject/prwnfhtx.html