剑指 Offer 31. 栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。  中等

例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

方法:模拟流程  时间复杂度O(n)  空间复杂度O(n)  

使用一个栈,模拟获得目标序列的过程,如果最后栈非空,说明不行

因为目标序列是数字的出栈顺序,即给定一个指针指向目标序列首,如果当前栈顶是序列首的值,就执行出栈

def validateStackSequences(pushed, popped):
        """
        :type pushed: List[int]
        :type popped: List[int]
        :rtype: bool
        """
        stack = []
        i = 0
        for num in pushed:
            stack.append(num)
            while stack and stack[-1] == popped[i]:
                stack.pop()
                i += 1
        return not stack
posted @ 2022-08-06 16:20  Liang-ml  阅读(20)  评论(0)    收藏  举报