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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [SSH]如何敲一条线

    [SSH]如何敲一条线[SSH]如何敲一条线

    2022年4月25日
    45
  • freeswitch呼叫中心开发

    freeswitch呼叫中心开发开发freeswitch呼叫中心1、配置ivr2、启用mod_callcenter3、开发websocker接口,通过esl接口,发送callcenter_config命令给fs4、开发客户端页面,注册,注销,就绪,置忙等接口5、开发来电弹屏,通过客户端读取redis参数实现freeswitch的呼叫中心模块很方便的就可以让用户体验这种呼叫中心模式,包含了很多功能,具体参数的配置在使用中自行摸索。编译安装freeswitch时需要开启mod_callcenter、mod_fifo的编译,之

    2022年7月12日
    20
  • 电驴服务器图标显示叉叉,2012年6月最新电驴服务器列表及设置方法

    电驴服务器图标显示叉叉,2012年6月最新电驴服务器列表及设置方法最新的电驴服务器,使用电骡的朋友都很熟悉了,将下载文件解压到X:\eMule\config目录下(config目录位置需视实际情况定,请参考:http://emulefans.com/shared-usage/),重启eMule即可完成更新。由于网络环境不佳,需要不开迷惑协议才可以顺利连接某些大型ed2k服务器。(万不得已的情况下才需要,比如实在无法连接服务器)转自:http://www.qvo…

    2022年7月15日
    21
  • mysql查看表结构的几种方式

    在我第N次忘记如何查看表结构后,在网上查了一下后,看到有好几种查看表结构的方式,总结一下。以student(sid,sname,birthday,sex)的查看为例。【方式一】:descstudent;语法:desc表名;———————用于查看表整体结构【方式二】:describestudent;…

    2022年4月3日
    201
  • java字符串分割方法.split()的详细用法「建议收藏」

    java字符串分割方法.split()的详细用法「建议收藏」先看看它在java包中的JavaAPI是:java.lang.String方法总结 (1)按指定普通字符分割: java代码如下: Stringstring=”123@456@789″; Stringarray[]=string.split(“@”);//以@分割 for(Strings:array) System.out.println(s); 运行结果: 123 456 789 (2).

    2022年6月22日
    35
  • js json字符串转json数组_string转json数组

    js json字符串转json数组_string转json数组查了很久,也实践了很多,都没有成功。网上说得最多的就是用 net.sf.json.JSONArray和net.sf.json.JSONObject两个jar包里面的JSONArrayjsonArray=JSONArray.fromObject(JsonStr);//字符串转成Json对象list=JSONArray.toList(jsonArray,Pojo.class);

    2022年10月6日
    5

发表回复

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

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