首页 > 编程语言 >代码随想录算法训练营Day11 | 栈与队列基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号

代码随想录算法训练营Day11 | 栈与队列基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号

时间:2024-07-11 14:56:21浏览次数:15  
标签:20 队列 self 随想录 pop queue return stack out

栈与队列

栈:先进后出     empty - push - push - pop

队列:先进先出

Tips: 栈队列STL(C++标准库)里面的两个数据结构。

STL最旁边的三个版本:HP STL、P.J.Plauger STL、SGI STL

232. 用栈实现队列

题目:232用栈实现队列

在python中,in主要负责push,out主要负责pop

初始:self.stack_in = [ ]   self.stack_out = [ ]

push(x) 将一个元素放入队列尾部:self.stack_in.append(x)

pop() 从队列首部移除元素:先判断是否为空;out栈是否为空,清空,再依次将in栈元素放入out栈,再清空。

        if self.empty():
            return None
        
        if self.stack_out:
            return self.stack_out.pop()
        else:
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_in.pop())
            return self.stack_out.pop()

peek() 返回队列首部元素:执行pop,在out栈加入pop元素,返回当前元素。

    def peek(self) -> int:
        """
        Get the front element.
        """
        ans = self.pop()
        self.stack_out.append(ans)
        return ans

empty() 返回队列是否为空:

    def empty(self) -> bool:
        """
        只要in或者out有元素,说明队列不为空
        """
        return not (self.stack_in or self.stack_out)

225. 用队列实现栈

题目:225. 用队列实现栈

在python中,in主要存放所有数据,out主要仅pop时使用

初始:self.queue_in  = deque()     self.queue_out = deque()

push(x)  元素 x 入栈:直接append即可

 def push(self, x: int) -> None:
        """
        直接append即可
        """
        self.queue_in.append(x)

pop()  移除栈顶元素:先判断是否为空,把in栈除最后一个元素依次放入out栈,交换in和out,此时out栈只有一个元素,把out中的pop出来,即原队列的最后一个。

  def pop(self) -> int:
     
        if self.empty():
            return None

        for i in range(len(self.queue_in) - 1):
            self.queue_out.append(self.queue_in.popleft())
        
        self.queue_in, self.queue_out = self.queue_out, self.queue_in    # 交换in和out,这也是为啥in只用来存
        return self.queue_out.popleft()

top()  获取栈顶元素:先判断不为空,仅有in存放数据,返回第一个即可

        if self.empty():
            return None
        
        return self.queue_in[-1]    # 这里实际上用到了栈,因为直接获取了queue_in的末尾元素

empty()  返回栈是否为空:

    def empty(self) -> bool:
        """
        因为只有in存了数据,只要判断in是不是有数即可
        """
        return len(self.queue_in) == 0

 20. 有效的括号

题目:20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

括号匹配是使用栈解决的经典问题。

方法:① 仅用栈,省空间  ② 用字典

思考三种不符合的情况:①最后栈不为空,没有配对完全 ② 遇到类型不匹配 ③ 栈为空还需要弹出

① 仅用栈

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        
        for item in s:
            if item == '(':
                stack.append(')')
            elif item == '[':
                stack.append(']')
            elif item == '{':
                stack.append('}')
            elif not stack or stack[-1] != item: #栈为空即第一种情况或第一个元素不是当前匹配元素,返回False
                return False
            else:
                stack.pop()
        
        return True if not stack else False

 # 栈为空即第一种情况或第一个元素不是当前匹配元素,返回False

②  使用字典

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        mapping = {
            '(': ')',
            '[': ']',
            '{': '}'
        }
        for item in s:
            if item in mapping.keys():
                stack.append(mapping[item])
            elif not stack or stack[-1] != item: 
                return False
            else: 
                stack.pop()
        return True if not stack else False

  

标签:20,队列,self,随想录,pop,queue,return,stack,out
From: https://blog.csdn.net/weixin_65053787/article/details/140332397

相关文章

  • 2024年神站推荐:一网打尽90%的磁力网站,覆盖海量资源!
    磁力网站作为一个方便用户获取资源的工具,在当前的网络环境中使用非常广泛。丰富资源:磁力搜索网站通常聚合了大量的资源,涵盖了各种类型的文件,包括电影、影视剧、音乐、游戏、软件等,用户可以在一个平台上找到所需的各种资源。高效检索:磁力搜索网站具有强大的搜索功能,用户可以......
  • 2024年8月份的护网行动如何参加?
    护网行动背景什么是“护网行动”?指挥机构∶由公安机关统一组织的"网络安全实战攻防演习"。护网分为两级演习∶公安部对总部,省厅对省级公司。什么是“实战攻防演习”每支队伍3-5人组成,明确目标系统,不限制攻击路径。提交漏洞不得分,获取权限、数据才能得分。禁止的行为......
  • 2024年8月份的护网行动如何参加?
    护网行动背景什么是“护网行动”?指挥机构∶由公安机关统一组织的"网络安全实战攻防演习"。护网分为两级演习∶公安部对总部,省厅对省级公司。什么是“实战攻防演习”每支队伍3-5人组成,明确目标系统,不限制攻击路径。提交漏洞不得分,获取权限、数据才能得分。禁止的行为......
  • 合合信息“大模型加速器”亮相2024世界人工智能大会
    文章目录......
  • AI推介-大语言模型LLMs之RAG(检索增强生成)论文速览(arXiv方向):2024.06.20-2024.07.01
    文章目录~1.AStudyonEffectofReferenceKnowledgeChoiceinGeneratingTechnicalContentRelevanttoSAPPhIREModelUsingLargeLanguageModel2.FromRAGtoRICHES:RetrievalInterlacedwithSequenceGeneration3.SK-VQA:SyntheticKnowledgeGeneration......
  • 2024最新,李宏毅深度学习!绝对值得反复阅读!
    介绍    李宏毅老师是台湾大学的教授,他的《机器学习》(2021年春)视频课程是深度学习领域中文视频中的经典之一。李老师风趣幽默的授课风格深受学生喜爱,他以很多动漫相关的有趣例子来解释深度学习理论,让原本晦涩难懂的内容变得轻松易懂。这门课程内容涵盖了深度学习中必须......
  • 上交2024最新-动手学大模型
    介绍  今天分享一个上海交大的免费的大模型,有相关文档和Slides,目前是2.2K星标,还是挺火的!获取:上交2024最新-《动手学大模型》实战分享!  《动手学大模型》系列编程实践,由上海交通大学2024年春季《人工智能安全技术》(NIS3353)讲义拓展而来(教师:张倬胜),旨在提供大模型相......
  • 上海月赛2020年4月
    丙组T1:https://www.iai.sh.cn/problem/24#include<bits/stdc++.h>usingnamespacestd;intmain(){inta,b,c,d;cin>>a>>b>>c>>d;intcnt=0;if(a>=90)cnt++;if(b>=90)cnt++;if(c......
  • 界面组件Kendo UI for React 2024 Q2亮点 - 生成式AI集成、设计系统增强
    随着最新的2024年第二季度发布,KendoUIforReact为应用程序开发设定了标准,包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示,从设计到代码的生产力增强、可访问性改进、一系列新的UI组件等。KendoUI致力......
  • 【2024-07-10】我们的过夜菜
    20:00事情都是想起来千难万险,但事到临头总有办法。                                                 ——约翰.缪尔何太的部门领导还有两年退休,在这位女领导的带领下,......