剑指 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

浙公网安备 33010602011771号