栈与队列

1.  946. 验证栈序列

给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。

 

示例 1:

输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
示例 2:

输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。

 

思路

1)  一直将pushed中的元素进栈到temp中,直到当前元素和popped中的首元素不一样

2)一直将temp中的元素出栈直到当前元素和popped对应位置的元素不一样

3)  检查res是否为空,空则true。

class Solution:
    def validateStackSequences(self, pushed, popped) -> bool:
        if not pushed and not popped:return True
        res = []
        i = 0
        for p in pushed:
            res.append(p)
            while(res and res[-1]==popped[i]):
                res.pop()
                i+=1
        return not res

 

 

2. 出栈顺序(卡特兰数

题目描述:

按照1,2,...,n-1,n的顺序入栈,问可以得到多少种出栈序列。如n=3时有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1共5种出栈序列。

出栈数目是卡特兰数,推导公式解法:

https://www.cnblogs.com/PengGG/p/4789929.html

https://blog.csdn.net/qq_22238021/article/details/80903507

 

posted @ 2019-08-09 12:10  三年一梦  阅读(347)  评论(0)    收藏  举报