您当前的位置: 首页 >  Python

Better Bench

暂无认证

  • 1浏览

    0关注

    695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Leetcode刷题Python】946. 验证栈序列

Better Bench 发布时间:2022-05-12 23:00:38 ,浏览量:1

1 题目

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

输入: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的元素依次进栈,每次进栈后,先对比栈顶和poped的值,如果相同,就出栈,poped指向第二个元素,直到对比完poped;不相同,pushed进栈下一个元素。最后进栈完毕并对比完poped,如果最后栈为空则返回True,否则返回False 在这里插入图片描述 在这里插入图片描述

3 Python实现
class Solution:
    def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool:
        # 利用栈来模拟入栈和出栈操作
        stack = []

        # index 表示 popped 数组中元素的下标
        # 比如 popped 是 [4,5,3,2,1]
        # 那么第 0 个下标元素是 4 这个数字
        # 先去判断这个数字能否正常的出栈
        index = 0

        # 遍历 pushed 数组中的每个元素
        for item in pushed:

            # 在遍历 pushed 数组时,把当前遍历的元素加入到栈中
            stack.append(item)

            # 加入完之后,不断的执行以下的判断
            # 1、栈中是否有元素
            # 2、栈顶元素是否和 popped 当前下标的元素相同
            # 如果同时满足这两个条件
            # 说明这个元素可以满足要求,即可以在最初空栈上进行推入 push 和弹出 pop 操作

            while stack and stack[-1] == popped[index] :
                # 那么就把栈顶元素弹出
                stack.pop()

                # 同时 index++,观察 popped 下一个元素
                index += 1
        return len(stack) ==0
关注
打赏
1665674626
查看更多评论
立即登录/注册

微信扫码登录

0.0370s