栈和队列专题

本专题用于总结在刷题过程中用到的有关栈和队列相关的知识点。

API: ⚠️ 栈:取栈顶元素是peek(),而不是top()

    队列:入队列是add 或者 offer .而不是push

       出队列是poll()

       取队头也是peek()

  • 包含min函数的栈 (剑指offer 21)

    通常栈是不考虑排序的数据结构,要找栈中的最值,通常需要O(n) 的时间。要求你给出一个O(1)时间求的最小值的算法。

    解: 如果考虑在栈中保留一个临时变量存储最小值,那么一旦该最小值出栈,则无法维护新的最小值。

      所以,在这里考虑了一个新的方法: 即使用一个数据栈保留数据,同时使用一个辅助栈。该辅助栈保存当前的最小值。

      数据栈每进行一次push操作,在辅助栈中就存一次当前的最小值。

  • 用两个栈实现一个队列 (剑指offer 7/ leetcode 232)

    解: 栈s1 用于入栈,直接模拟入队列操作。

                  栈s2 用于出栈。如果它是空的,那么先把s1 的元素依次出栈,再依次入s2栈。对s2进行pop(),就模拟了出队列

             如果它是非空的,则直接出栈即可。

  • 用两个队列实现一个栈 (leetcode 225)

    解:两个队列Q1,Q2.

      模拟入栈:如果Q1 、 Q2均为空,那么任选一个队列,入队列即可。如果有一个不为空,则入该队列。

      模拟出栈:另一个队列是空的,将非空队列中的元素,仅保留最后一个元素,其前面的元素依次进入空队列。最后一个元素出队列,即可以模拟后进先出。      

 

转载于:https://www.cnblogs.com/vector11248/p/10497997.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值