单调栈:每日温度

  • 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替
  • 单调栈基本只处理NGE问题(Next GreaterElement)。对序列中每个元素,找到下一个比它大的元素。(“下一个”可以换成“上一个”,“大”也可以换成“小”)
class Solution(object):def dailyTemperatures(self, temperatures):""":type temperatures: List[int]:rtype: List[int]"""length = len(temperatures)res = [0 for _ in range(length)]stack = []  # 维护一个单调栈,其中的值是单调递减的for i in range(length):t = temperatures[i]while (len(stack) > 0 and temperatures[stack[-1]] < t):res[stack[-1]] = i - stack[-1]stack.pop()stack.append(i)return res

单调队列:滑动窗口的最大值

  • 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值(典型用法)

  • 详细参考

"""
用一个queue(滑动窗口,先入先出)和一个deque实现
queue负责push和pop,deque用来存放最大值
1. 如果新的value大于deque尾端的值,那么deque一直进行pop_back操作,直到尾端的值大于等于value 或者为空,再将value压入deque的尾部
2. 每次取max_value,返回deque首部的值
3. 当que进行pop操作时,如果que首部的值等于deque首部的值,那么deque同样需要进行pop_front操作
"""
class Solution(object):def maxSlidingWindow(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""desc_q = []  # 单调递减队列# 初始化for i in range(k):while (desc_q and desc_q[-1] < nums[i]):desc_q.pop()desc_q.append(nums[i])res = [desc_q[0]]for i in range(k, length):in_num = nums[i]  # 加入窗口的数字out_num = nums[i - k]  # 退出窗口的数字if out_num == desc_q[0]:  # 如果在单调队列首部则同步退出desc_q.pop(0)while (desc_q and desc_q[-1] < in_num):desc_q.pop()desc_q.append(in_num)res.append(desc_q[0])return res

数据结构 - 单调栈、单调队列相关推荐

  1. Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP

    单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...

  2. 单调栈 、 队列学习

    推荐博客 : https://blog.csdn.net/zuzhiang/article/details/78134247 单调栈.队列只需满足两个条件即可,序列是单调的,并且符合栈和队列的特性. ...

  3. 【数据结构】栈、队列、堆的python实现

    [数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...

  4. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  5. 数据结构~07.栈和队列的基本概念

    数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...

  6. 10.数据结构:栈和队列

    大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...

  7. 【数据结构】栈与队列区分push pop offer poll containsKey put等

    目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...

  8. 算法与数据结构(part5)--栈与队列

    学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...

  9. 数据结构03栈和队列

    第三章栈和队列 STL 栈:stack http://blog.csdn.net/weixin_37289816/article/details/54773495 队列: queue  http:// ...

  10. 用Java描述数据结构之栈和队列,以及栈和队列的常用方法

    一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然.它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具 ...

最新文章

  1. 正则表达式中$1,$2 ===算是什么意思
  2. R语言关系操作符:>、<=、!=、>=、==、
  3. 使用ModelBinder自动过滤获取Model值的空格
  4. unity获取脚本组件_Unity3D【脚本】获取游戏物体的Animator组件,并且修改动画属性 | 学步园...
  5. 当前只读状态:是_Raft 只读(read-only)优化
  6. JavaScript中错误正确处理方式,你用对了吗? 1
  7. JSP中forward和include的区别
  8. Web 前端开发初学者十问集锦(2)
  9. windows 7 提示缺少D3DCOMPILER_47.dll的正确解决方法
  10. springsecurity安全登录框架
  11. (转)JavaScript事件冒泡简介及应用
  12. Linux下安装anaconda,创建虚拟环境python3.7,并且安装深度学习框架pytorch进行模型训练
  13. Worktile Teambition 与Tower 使用对比
  14. 网络规划设计师教程知识点精讲之计算机网络分类
  15. 大学计算机教程王梦倩,【经验共享】中国矿业大学资源学院辅导员王梦倩
  16. 进程间通信的方式有哪些?
  17. 异常处理 | manual close is not allowed over a Spring managed SqlSession
  18. [音乐天堂]辛德勒名单原声大碟
  19. 华为ENSP进行evn实验,尚不完整,但已经有RT1、RT2、RT3、RT4了
  20. Shell-基础部分

热门文章

  1. VSCode同步设置
  2. [转].NET 开源项目 Polly 介绍
  3. 【QGIS入门实战精品教程】4.5:QGIS打开Excel中的点坐标,并生成矢量文件
  4. 剑指offer之二叉搜索树的第K个节点
  5. Android之运行的错误:java.lang.UnsatisfiedLinkError: Couldn‘t find cibloger.so
  6. pkpm板按弹性计算还是塑性_PKPM中的S\R验算显红原因分析
  7. 双网卡上网冲突解决_【技术文章】局域网IP地址冲突罪魁祸首是什么?这几点要注意!(附高手处理方法)...
  8. python运行时间过长怎么优化_Python性能优化的20条建议
  9. 80岁COBOL码农:扶我起来,这个bug我会修!
  10. 逻辑回归算法背后的数学