leetcode单调队列_单调栈leetcode

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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/190554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • chrome小恐龙源代码_chrome小恐龙代码

    chrome小恐龙源代码_chrome小恐龙代码Chrome小恐龙前端修改代码代码总结偶然间发现谷歌浏览器的离线小恐龙游戏,上网查找的攻略总结。Chrome小恐龙是什么?在Chrome(谷歌浏览器)断网之后访问在线页面,如a.com会出现以下

    2022年8月3日
    6
  • 软件架构与设计模式_软件架构设计

    软件架构与设计模式_软件架构设计什么是架构?软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。ANSI/IEEE610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组…

    2022年8月31日
    4
  • tasklist详解

    tasklist详解TASKLIST[/Ssystem[/Uusername[/P[password]]]]     [/M[module]|/SVC|/V][/FIfilter][/FOformat][/NH]描述:  该工具显示在本地或远程机器上当前运行的进程列表。参数列表:  /S  system     指定连

    2022年5月22日
    59
  • 大数据经典案例有哪些?

    大数据经典案例有哪些?“互联网还没搞清楚的时候,移动互联就来了移动互联还没搞清楚的时候,大数据就来了”。近两年,“大数据”这个词越来越为大众所熟悉,“大数据”一直是以高冷的形象出现在大众面前,面对大数据,相信许多人都一头雾水。下面我们通过几个经典案例,让大家实打实触摸一把“大数据”。你会发现它其实就在身边而且也是很有趣的。1.啤酒与尿布全球零售业巨头沃尔玛在对消费者购物行为分析时发现,男性顾客在购买婴儿尿片时,常常会顺便搭配几瓶啤酒来犒劳自己,于是尝试推出了将啤酒和尿布摆在一起的促销手段。没想到这个举措居然使尿布

    2022年5月2日
    46
  • Springboot自动装配的原理「建议收藏」

    Springboot自动装配的原理「建议收藏」springboot在日常开发中减少了我们许多工作量减少了很多XML配置,这都得益于springboot自动装配的特性。那么springboot是如何实现自动装配的呢?首先我们浅显得介绍一些springboot的一些主要注解:@Configuration用于声明定义bean这也是springboot中的主要注解其实就是平常Spring配置文件中我们写的bean@EnableAutoConfiguration用来开启springboot自动配置的注解,这个也是自动装…

    2022年8月20日
    4
  • pycharm双击打不开,没有反应,下列方法亲测有用!

    pycharm双击打不开,没有反应,下列方法亲测有用!关于这个问题,刚好我朋友安装的pycharm出现了同样地问题,激活成功教程安装一段时间后就突然打不开了,网上有许多的解决办法,我都试了一遍还是无果,后来自己发现了问题所在,首先给大家科普一下网上的方法,再放上我的,请大家耐心读完。亲测有效!!!第一种:1.打开C:\Windows\System32;以管理员身份运行cmd.exe;2.在打开的cmd窗口中,输入netshwinsockreset,按回车键;3.重启电脑;4.重启后,双击pycharm图标就能打开了!第二种:在Pycha

    2022年8月25日
    7

发表回复

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

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