代码随想录第十天 栈和队列

第一题 很经典的栈模拟队列 https://leetcode.cn/problems/implement-queue-using-stacks/submissions/693619507/

这道题倒是没啥算法性质,主要还是模拟(话说模拟也不简单啊,挺考验思维能力的),一个栈的话只能先进后出所以怎么都无法实现先进先出的效果,所以肯定是两个栈,一个模拟入队,一个模拟出队,具体实现时是一个栈作为压入栈,在压入数据时只往这个栈中压入,记为In_stack;另一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为out_stack。因为数据压入栈的时候,顺序是先进后出的。那么只要把In_stack的数据再压入out_stack中,顺序就变回来了,这听上去简单但是有两个要注意:

  1. 一次性全部压入 :从 in_stackout_stack转移时,必须一次性转移所有元素。

  2. 非空不压入 :只要 out_stack 不为空,就绝对不能进行转移。

违反1的情况举例:1~5依次压入in_stackin_stack的栈顶到栈底为5~1,从in_stack压入out_stack 时,只将5和4压入了out_stackout_stack 还剩下1、2、3没有压入。此时如果用户想进行弹出操作,那么4将最先弹出,与预想的队列顺序就不一致。

违反2的情况举例:1~5依次压入in_stackin_stack将所有的数据压入out_stack ,此时从out_stack 的栈顶到栈底就变成了1~5。此时又有6~10依次压入in_stackout_stack 不为空,in_stack不能向其中压入数据。如果违反2压入了out_stack ,从out_stack 的栈顶到栈底就变成了6~10、1~5。那么此时如果用户想进行弹出操作,6将最先弹出,与预想的队列顺序就不一致.

python 复制代码
class MyQueue:

    def __init__(self):
        self.in_stack = []
        self.out_stack = []

    def push(self, x: int) -> None:
        self.in_stack.append(x)

    def pop(self) -> int:
        self._help()
        return self.out_stack.pop()

    def peek(self) -> int:
        self._help()
        return self.out_stack[-1]

    def empty(self) -> bool:
        return not self.in_stack and not self.out_stack

    def _help(self):
        if not self.out_stack:
            with self.in_stack:
                self.out_stack.append(self.in_stack.pop())

def _help(self):

规则2:只有out_stack为空时才转移

if not self.out_stack:

规则1:一次性转移in_stack中的所有元素

while self.in_stack: # 这个while循环保证了"一次性全部"

self.out_stack.append(self.in_stack.pop())

相关推荐
hhzz17 分钟前
【OpenCV 入门到精通 03】图像入门:读取、显示、保存完全指南
人工智能·python·opencv·计算机视觉
金融小师妹1 小时前
AI趋势识别:黄仁勋宣布“AGI时代”到来,Astra能力跃迁背后的AI安全边界
大数据·python·深度学习·重构·逻辑回归
2501_941875284 小时前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj4 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
努力的lpp6 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob2336 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
泡海椒7 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb7 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
sanjiaomao3338 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
Keven_118 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++