目录单调栈(Monotone Stack)42. 接雨水84. 柱状图中最大的矩形方法1:暴力法O(n^2)方法2:单调栈O(n)单调栈:不使用Stack,使用Deque方法3:暴力优化(本题最优解)单调栈(Monotone Stack)栈的应用中有一类问题称为单调栈(Monotone Stack)问题,可以巧妙的将某些问题的时间复杂度降到「O(n)级别」。那么什么是单调栈呢?所谓单调栈,就是保持
单调栈,英文 monotonic stack. 如果你常刷LeetCode的话,百题之内至少见2次单调栈。 本文尝试揭秘单调栈的关键点。单调栈的定义单调栈分为单调递增栈和单调递减栈。单调递增栈: 从栈顶往栈底看,是单调递增的关系(含相等);单调递减栈: 从栈顶往栈底看,是单调递减的关系(含相等);严格来说,含了“相等”的,应该就不能说是“单调”了,但在这里应作宽泛的理解,即这里的“单调”也包括“相
转载
2023-08-21 11:45:06
62阅读
前言:本篇用了我比较长的时间,干货较多,甚至一篇顶三篇,希望各位耐心观看。Part 1:单调栈 单调栈是一种数据结构,一般分为单调递增栈和单调递减栈。单调栈一般用来解决寻找下一个大于或小于m的值。 我们把得到的答案放到K数组里。 一个经典例题:定义函数 在单调栈中,如果栈为空,那么K[i]就为0,如果栈不为空,则判断栈顶是否大于a[i],如果不是,那么弹出栈顶。最后,不管什么情
什么叫单调栈呢?就是单调递增或是单调递减的栈。 适用于什么样的题呢?柱状图中最大的矩形柱状图中最大的矩形: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。输入: [2,1,5,6,2,3]输出: 10一般式:输入的是数组且
#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;
单调栈是一种特殊的栈,要求栈中的元素是单调递减或者单调递减的。1、适用场景单调栈适合的题目是求解下一个大于 xxx或者下一个小于 xxx这种题目。所有当你有这种需求的时候,就应该想到单调栈。2、介绍比如我们需要依次将数组 [1,3,4,5,2,9,6] 压入单调栈。首先压入 1,此时的栈为:[1]继续压入 3,此时的栈为:[1,3]继续压入 4,此时的栈为:[1,3,4]继续压入 5,此时的栈为:
单调性优化:单调栈与单调队列一、单调栈单调栈,就是要维护一个栈,单调递增或递减。一般地,放入元素时,如果栈顶的元素不符合单调递增(或递减),那就把它弹出,再查栈顶。直到符合或栈空了,再把元素放入。适用于快速求每个数两侧比它大(或小)的数的位置。例题-柱状图中最大的矩形算法·其实很简单
·在这种方法中,我们维护一个栈。
·一开始,我们把 -1 放进栈的顶部来表示开始。
·按照从左到右的顺序,我们不断
(文章目录) 前言 本文介绍单调栈和单调队列的使用,并且提供模板。 一、单调栈? 栈地到栈顶是单调增加或者单调减少的。 1.代码模板: //常见模型:找出每个数左边离它最近的比它大/小的数 //stk[0]是不存放元素的,stk[tt]存放栈顶元素 int tt = 0; for (int i = ...
转载
2021-07-25 00:33:00
670阅读
2评论
1. 使用场景 一个数组,对于第i个元素,找出离它最近且比它大/小的两边的index分别是多少? 比如“LeetCode接雨水”这道题,就需要找出距离某个index最近且比它大的两边的index, 然后才可以以该index为hight,以right - left + 1位width,求出可以接到的雨 ...
转载
2021-07-27 14:24:00
4739阅读
2评论
题目链接 acwing830. 单调栈 P5788 【模板】单调栈 acwing830. 单调栈 题目描述 给定一个长度为 \(N\) 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 \(−1\)。 输入格式 第一行包含整数 \(N\),表示数列长度。 第二行包含 \(N\) 个整数, ...
转载
2021-09-22 15:18:00
130阅读
2评论
涉及任意区间 (子序列) 求最大最小值的一系列操作(可以求这个元素在那个区间是最小值 || 最大值) 向左向右的第一个比当前元素大的值(的下标等) 单调栈就行了 例题: ZZULI XXX 题意:给你一串序列,要你求所有子序列的最小值之和。(n很大,无法暴力) 思路:完美的单调栈模板 这里简要介绍下
转载
2019-05-05 15:10:00
127阅读
2评论
#include <iostream>using namespace std;const int N=10010;int stk[N],tt;int n,x;int main(){cin>>n;while(n--){cin>>x;while(tt&&stk[tt]>=x) tt--;if(tt) c ...
转载
2021-09-27 20:56:00
125阅读
2评论
【题目描述】 给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。 【输入格式】 第一行包含整数 N,表示数列长度。 第二行包含 N 个整数,表示整数数列。 【输出格式】 共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在 ...
转载
2021-10-17 15:31:00
96阅读
2评论
目录一,单调栈二,具体实现三,应用1,数组大小关系计算2,力扣OJ907. 子数组的最小值之和一,单调栈单调栈是一种基于栈进行的算法。场景:给定一
原创
2021-12-27 10:52:26
76阅读
如果输入一个数以后,小于前面数字,则对于后面的数来说,当前输入的这个数字必然优于前面的数字,则将前面大于这个数的数字全部删掉,
原创
2022-11-07 15:45:37
83阅读
从栈低到栈顶元素依次减小的单调栈 从栈低到栈顶元素依次增大的单调栈 应用
原创
2021-07-07 16:21:11
156阅读
当遇到的问题相当于,求解 prev smaller element :初始数组从后往前,维护一个单调递增栈 next smaller element: 初始数组从前往后,维护一个单调递增栈 ...
转载
2021-10-13 15:53:00
85阅读
2评论
单调栈与单调队列很相似。首先栈是后进先出的,单调性指的是严格的递增或者递减。 单调栈有以下两个性质: 1、若是单调递增栈,则从栈顶到栈底的元素是严格递增的。若是单调递减栈,则从栈顶到栈底的元素是严格递减的。 2、越靠近栈顶的元素越后进栈。 单调栈与单调队列不同的地方在于栈只能在栈顶操作,因此一般在应用单调栈的地方不限定它的大小,否则会造成元素无法进栈。 元素进栈过程:对于单调递增栈,若当前进栈元
转载
2022-08-04 09:37:20
49阅读
题目
给定一个长度为 $N$ 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 $−1$。
输入格式
第一行包含整数 $N$,表示数列长度。
第二行包含 $N$ 个整数,表示整数数列。
输出格式
共一行,包含 $N$ 个整数,其中第 $i$ 个数表示第 $i$ 个数的左边第一个比它小的数,如果不存在则输出 $−1$。
数据范围
$1≤N≤10^5$
$1≤数列中元素≤10^9$
输入
原创
2023-07-15 09:43:41
65阅读
单调栈
原创
2023-07-01 10:59:01
57阅读