Leetcode 单调栈问题总结(超详细!!!)

Leetcode 单调栈问题总结(超详细!!!)0x00 单调栈主要回答这样的几种问题比当前元素更大的下一个元素比当前元素更大的前一个元素比当前元素更小的下一个元素比当前元素更小的前一个元素 0x01 问题一维护一个单调递减的栈 Leetcode496 下一个更大元素 I 超详细的解法 Leetcode503 下一个更大元素 II 超详细的解法 Leetcode739 每日温度 超详细的解法 cl

0x00

单调栈主要回答这样的几种问题

  • 比当前元素更大的下一个元素
  • 比当前元素更大的前一个元素
  • 比当前元素更小的下一个元素
  • 比当前元素更小的前一个元素

0x01 问题一

维护一个单调递减的栈。

Leetcode 42:接雨水(超详细的解法!!!)

Leetcode 496:下一个更大元素 I(超详细的解法!!!)

Leetcode 503:下一个更大元素 II(超详细的解法!!!)

Leetcode 739:每日温度(超详细的解法!!!)

class Solution: def nextGreaterElement(self, nums): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ stack = list() res = [-1]*len(nums) for i, n in enumerate(nums): while stack and nums[stack[-1]] < n: res[stack.pop()] = n stack.append(i) return res 

0x02 问题二

维护一个单调递减的栈。

Leetcode 901:股票价格跨度(超详细的解法!!!)

Leetcode 239:滑动窗口最大值(超详细的解法!!!)(更明确为区间最大元素问题)

class Solution: def preGreaterElement(self, nums): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ stack = list() res = [-1]*len(nums) for i, n in enumerate(nums): while stack and nums[stack[-1]] < n: stack.pop() if stack: res[i] = nums[stack[-1]] stack.append(i) return res 

0x03 问题三

维护一个单调递增的栈。

Leetcode 84:柱状图中最大的矩形(超详细的解法!!!)

class Solution: def nextSmallerElement(self, nums): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ stack = list() res = [-1]*len(nums) for i, n in enumerate(nums): while stack and nums[stack[-1]] > n: res[stack.pop()] = n stack.append(i) return res 

0x04 问题四

维护一个单调递增的栈。

class Solution: def preSmallerElement(self, nums): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ stack = list() res = [-1]*len(nums) for i, n in enumerate(nums): while stack and nums[stack[-1]] > n: stack.pop() if stack: res[i] = nums[stack[-1]] stack.append(i) return res 

至于最后一点要说的就是,如何确定是使用严格单调栈还是非严格单调栈只要根据题意确定我们栈中是否可以存放相同元素即可。

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217031.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:30
下一篇 2026年3月18日 上午10:30


相关推荐

  • c++中decltype_find的用法归纳

    c++中decltype_find的用法归纳1.什么是decltypedecltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有的自动类型推导场景,在某些特殊情况下auto用起来很不方便,甚至压根无法使用。autovarName=value;decltype(exp)varName=value;auto根据=右边的初始值推导出变量的类型,decltype根据exp表达式推导出变量的类型,跟=右边的value没有关系…

    2025年10月13日
    4
  • DataX使用指南

    DataX使用指南简介DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS等各种异构数据源之间高效的数据同步功能。DataX采用了框架+插件的模式,目前已开源,代码托管在github。DataX安装部署及小试1.下载压缩包:下载页面地址:https://github.com/a…

    2022年5月16日
    55
  • 静态代理详解[通俗易懂]

    静态代理详解[通俗易懂]1.什么是静态代理?代理这个词是来源于Java设计模式中的代理模式,代理模式最简单的理解就是通过第三方来代理我们的工作比如中介,房东需要将自己的房子租出去,而租客需要租房子,三者关系如此租客租房子一般都找不到房东,房东也不会轻易将自己暴露给广大租客,因此就需要中介来充当这个中间关系因此租客就只能通过中介来进行租房子这个工作,不需要通过房东,这就叫做代理—-就是中介代理房东来处理租房子这件事情那么我们应用于Java中又是什么样的情况呢?首先创建一个主题接口(别问为什么创建接口,J.

    2022年10月16日
    6
  • 社区打造智慧小区_idc智能化解决方案

    社区打造智慧小区_idc智能化解决方案智慧社区建设方案丨智慧小区智能化解决方案随着物联网技术和我国新一代互联网技术的发展,未来社区网络将会实现全覆盖,通过社区网络和物联网络,将会实现社区机电设备和住宅的自动化,智能化,实现远程监控和网络数字化。智慧社区是社区综合服务管理的一种创新,利用前沿的智能化基础设施建设,增强社区治理和小区管理智能化,推动便民措施服务项目智能化,使社区居民的衣食住行更为舒服、高效率。智慧社区概念介绍:智慧社区是指充分利用物联网、云计算、移动互联网等新一代信息技术的集成应用,涉及到智能楼…

    2022年10月18日
    7
  • mysql添加唯一索引语句_mysql修改唯一索引语句

    mysql添加唯一索引语句_mysql修改唯一索引语句查看索引showindexfrom数据库表名altertable数据库addindex索引名称(数据库字段名称)PRIMARYKEY(主键索引)ALTERTABLE`table_name`ADDPRIMARYKEY(`column`)UNIQUE(唯一索引)ALTERTABLE`table_name`ADDUNIQUE(`column`)INDEX(普…

    2026年2月1日
    7
  • python入门001~python开发工具 pycharm的安装与激活成功教程(mac和window都有讲)

    python入门001~python开发工具 pycharm的安装与激活成功教程(mac和window都有讲)视频讲解地址 https edu csdn net course detail 25009 我们做 python 开发时 不可避免的要用到开发者工具 本节就来教大家下载安装 pycharm 一款比较受欢迎的 python 开发者工具 我们这里以安装最新 pycharm2019 1 3 版本为例一 pycharm 的官网下载下载地址 https www jetbrains com pycharm

    2026年3月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号