目录单调栈(Monotone Stack)42. 接雨水84. 柱状图中最大的矩形方法1:暴力法O(n^2)方法2:单调栈O(n)单调栈:不使用Stack,使用Deque方法3:暴力优化(本题最优解)单调栈(Monotone Stack)栈的应用中有一类问题称为单调栈(Monotone Stack)问题,可以巧妙的将某些问题的时间复杂度降到「O(n)级别」。那么什么是单调栈呢?所谓单调栈,就是保持
转载
2023-11-28 13:02:44
65阅读
单调栈,英文 monotonic stack. 如果你常刷LeetCode的话,百题之内至少见2次单调栈。 本文尝试揭秘单调栈的关键点。单调栈的定义单调栈分为单调递增栈和单调递减栈。单调递增栈: 从栈顶往栈底看,是单调递增的关系(含相等);单调递减栈: 从栈顶往栈底看,是单调递减的关系(含相等);严格来说,含了“相等”的,应该就不能说是“单调”了,但在这里应作宽泛的理解,即这里的“单调”也包括“相
转载
2023-08-21 11:45:06
72阅读
前言:本篇用了我比较长的时间,干货较多,甚至一篇顶三篇,希望各位耐心观看。Part 1:单调栈 单调栈是一种数据结构,一般分为单调递增栈和单调递减栈。单调栈一般用来解决寻找下一个大于或小于m的值。 我们把得到的答案放到K数组里。 一个经典例题:定义函数 在单调栈中,如果栈为空,那么K[i]就为0,如果栈不为空,则判断栈顶是否大于a[i],如果不是,那么弹出栈顶。最后,不管什么情
转载
2024-01-02 11:36:35
87阅读
什么叫单调栈呢?就是单调递增或是单调递减的栈。 适用于什么样的题呢?柱状图中最大的矩形柱状图中最大的矩形: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。输入: [2,1,5,6,2,3]输出: 10一般式:输入的是数组且
转载
2024-06-10 06:38:50
47阅读
#include<iostream>using namespace std;const int N=10010;int n;int stk[N],tt;int main(){ cin>>n; for(int i=0;i<n;i++){ int x;
原创
2024-08-22 14:00:37
26阅读
单调性优化:单调栈与单调队列一、单调栈单调栈,就是要维护一个栈,单调递增或递减。一般地,放入元素时,如果栈顶的元素不符合单调递增(或递减),那就把它弹出,再查栈顶。直到符合或栈空了,再把元素放入。适用于快速求每个数两侧比它大(或小)的数的位置。例题-柱状图中最大的矩形算法·其实很简单
·在这种方法中,我们维护一个栈。
·一开始,我们把 -1 放进栈的顶部来表示开始。
·按照从左到右的顺序,我们不断
转载
2023-12-18 12:26:39
72阅读
单调栈是一种特殊的栈,要求栈中的元素是单调递减或者单调递减的。1、适用场景单调栈适合的题目是求解下一个大于 xxx或者下一个小于 xxx这种题目。所有当你有这种需求的时候,就应该想到单调栈。2、介绍比如我们需要依次将数组 [1,3,4,5,2,9,6] 压入单调栈。首先压入 1,此时的栈为:[1]继续压入 3,此时的栈为:[1,3]继续压入 4,此时的栈为:[1,3,4]继续压入 5,此时的栈为:
转载
2023-12-10 18:05:33
39阅读
1 典型的单调栈问题,利用单调递减栈进行解决,从前和从后遍历都可以解决问题,从后遍历时,确定的是入栈元素的答案,从前遍历时,确定的是出栈元素的答案,739. 每日温度2 利用单调递减栈解决,关键是出栈时计算每个位置当前可以盛水的量,所以每次出栈后要保证栈不空,才可以计算盛水量,否则结束,42. 接雨水3 用单调递减栈从前往后遍历,多了一个用哈希表来记录映射,496. 下一个更大元素 I4 单调递增
转载
2024-10-24 19:16:32
61阅读
1.【算法】单调栈
一、算法理解单调栈是一种理解起来很容易,但是运用起来并不那么简单的数据结构。
单调栈,就是一个堆栈,里面的元素的按照大小在栈中满足一定的单调性。也就说是,就是递增存储元素、或递减存储元素,当该单调性(递增性、或递减性)被打破时要进行适当出栈。单调栈也分为 递增单调栈 和 递减单调栈递增单调栈:从栈底 到 栈顶 保存的数据是从小到大递减单调栈:从栈底 到 栈顶 保存的数据是从大到
(文章目录) 前言 本文介绍单调栈和单调队列的使用,并且提供模板。 一、单调栈? 栈地到栈顶是单调增加或者单调减少的。 1.代码模板: //常见模型:找出每个数左边离它最近的比它大/小的数 //stk[0]是不存放元素的,stk[tt]存放栈顶元素 int tt = 0; for (int i = ...
转载
2021-07-25 00:33:00
695阅读
2评论
单调栈 参考: 单调栈 - Shuyu Fang - CSDN博客http://blog.csdn.net/alongela/article/details/8227707 单调栈的介绍以及一些基本性质 - 多反思,多回顾,要坚持。 - CSDN博客http://blog.csdn.net/liuj
转载
2017-08-28 19:12:00
324阅读
2评论
字面意思上理解,栈内元素是单调的,根据题目要求可能是单调递增或递减的。对于一个长度为 n 的序列,如果要求左边第一个比 x 小的数
暴力做法:
但是我们可以有些数是永远不可能被当成答案输出的
例如,如果 6 的后面有 4 ,那么由于 4 比 6 小,且位于更右边,距离待求数更近,所以 6 不可能... ...
转载
2021-08-04 08:41:00
103阅读
2评论
单调栈先说一下单调栈的构成,其实就是 用数组模拟单调栈首先我们需要 一个头指针 一个原数组 一个构造的栈数组;就这么简单明了问题
原创
2022-07-15 10:22:27
70阅读
题目给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤1051≤N≤1051≤数列中元素≤1091≤数列中元素≤109输入样例:53 4 2 7 5输出...
原创
2021-07-09 14:51:20
229阅读
功能:求出某个数的左边或者右边第一个比它大或者小的元素,总时间复杂度O(N)。求一个以某个值为最小值的区间。
转载
2014-06-08 00:32:00
67阅读
2评论
单调栈 1.0 原始模型 描述:给定一个序列,求出序列每个位置在左侧距离其最近的,且比起小的数,如果不存在则返回-1,存在则返回其值, 最后输出该结果。 解析: 首先考虑对该题目的朴素解(暴力解法),挖掘一些性质,把求解空间进一步缩小,从而降低问题的求解时间复杂度。 1. 暴力做法 双重循环:第一重 ...
转载
2021-07-13 00:24:00
174阅读
简介 单调栈,顾名思义,即为栈内元素(出栈元素)单调递增或单调递减的栈。 单调递增栈:从栈顶到栈底元素递增。 单调递减栈:从栈顶到栈底元素递减。 构成方法 eg.[3,5,1,2,9]构成单调递增栈 首先栈空,3入栈 5入栈,5>3故:3出5入3入 1入栈,1<3故:1入 2入栈,2>1且2<3故: ...
转载
2021-09-11 10:07:00
170阅读
2评论
1. 单调栈简介1.1 前言今天是 2023/1/15,一中寒假集训阶段性的结束了。集训的学习笔记可以在本人 blogs 的【算法】标签栏中找。马上就要过年了,提前祝大家新年快乐!1.2 什么是单调栈单调栈(monotone-stack)是一种基于栈进行的算法,且栈内元素(栈底到栈顶)都是(严格)单调递增或者单调递减的。定义很抽象,不如拿一道题来直观的理解单调栈。1.3 算法流程1.3.1 [lu
转载
2023-09-18 14:11:22
192阅读
从栈低到栈顶元素依次减小的单调栈 从栈低到栈顶元素依次增大的单调栈 应用
原创
2021-07-07 16:21:11
161阅读
当遇到的问题相当于,求解 prev smaller element :初始数组从后往前,维护一个单调递增栈 next smaller element: 初始数组从前往后,维护一个单调递增栈 ...
转载
2021-10-13 15:53:00
110阅读
2评论