栈的压入与弹出序列校验

网站建设4年前发布
11 0 0

有两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出顺序。假设压入栈的数字均不相等。例如,序列[1, 2, 3, 4, 5]是某栈的压栈序列,序列[4, 5, 3, 2, 1]是该栈序列对应的一个弹出序列,但[4, 3, 5, 1, 2]就不可能是该压栈序列的弹出序列。,仔细分析题目后,我们很直观的想法就是构造一个辅助栈,把压入序列中的数字依次压入该辅助栈。按照弹出序列的顺序依次从该栈中弹出数字,如果辅助栈被清空则代表此序列是它的一个弹出序列,否则就不可能是一个弹出序列。,如下图所示,它的压入过程为:,取出弹出序列的第1个元素,维护一个已取索引,在压入序列中从已取索引位置开始寻找与之相等的元素,将它之前的数字和其本身依次入栈,每取1个元素就将索引自增1次。,此时,栈顶元素与弹出序列的第1个元素相等,将栈顶元素出栈。,取出弹出序列的第2个元素,在压入序列中从已取索引位置开始寻找与之相等的元素,将它之前的数字和其本身依次入栈。,此时,栈顶元素与弹出序列的第2个元素相等,将栈顶元素出栈。,取出弹出序列的第3个元素,此时,压入序列的元素已经被取完。我们继续判断 辅助栈中的元素是否与弹出序列的元素相等。,栈顶元素为3,要弹出的元素也是3,二者相等,栈顶元素出栈;,取出弹出序列的第4个元素;,栈顶元素为2,要弹出的元素也是2,二者相等,栈顶元素出栈;,取出弹出序列的第5个元素;,栈顶元素为1,要弹出的元素也是1,二者相等,栈顶元素出栈;,弹出序列已取完,辅助栈已清空。 该弹出序列属于压入序列的一个弹出顺序;,弹出序列不满足条件;,接下来,我们来分析下它不是压入序列的弹出顺序的情况,它的压入过程与满足条件时一样,唯独不同的是,弹出序列的第3个元素从辅助栈出栈后,压入序列已经被取完。此时,弹出序列的第4个元素是1,辅助栈的栈顶元素是2,二者不等,那么该序列肯定不是压入序列的弹出顺序。,2023030601362443151f4972d44cfcfc32787f50b0bbe5bba557515,经过上面的分析,我们已经知道了如何解决这个问题。思路已明确,接下来,我们就可以愉快的进入编码环节了。,最后,我们将开头列举的例子来验证下上述代码是否正确执行,如下所示:,2023030601344427ffbc286004b0681e824776e9ad5b956c466d577,本文所用代码完整版请移步:,

© 版权声明

相关文章